mysql - 将 INNER JOIN 与插入和更新一起使用时在 VB.Net 中出现错误
问题描述
我正在尝试使用 INNER JOIN 插入和更新,但是每当我保存它时,我都会在 SET 周围出现错误,我无法弄清楚它到底有什么问题这是我第一次使用 INNER JOIN 我真的需要帮助
mysqlConn.Open()
sqlCmd = New Odbc.OdbcCommand
sqlCmd.Connection = mysqlConn
sqlCmd.CommandText = "INSERT INTO customer (guestno, datein, dateout, fullname, address, contactnum, total, paid, balance) VALUES ('" & Replace(Trim(staff_ri_txtguestno.Text), "'", "''") & "', '" & Replace(Trim(staff_ri_dtpin.Text), "'", "''") & "', '" & Replace(Trim(staff_ri_dtpout.Text), "'", "''") & "', '" & Replace(Trim(staff_ri_txtfullname.Text), "'", "''") & "', '" & Replace(Trim(staff_ri_txtaddress.Text), "'", "''") & "', '" & Replace(Trim(staff_ri_txtnumber.Text), "'", "''") & "', '" & Replace(Trim(staff_ri_txttotal.Text), "'", "''") & "', '" & Replace(Trim(staff_ri_txtpaid.Text), "'", "''") & "', '" & Replace(Trim(staff_ri_txtbalance.Text), "'", "''") & "')
SET room.customer_id = customer.customer_id
UPDATE room SET roomstatus = '" & Replace(Trim("Occupied"), "'", "''") & "'
FROM room T1 INNER Join customer T2 ON T1.customer_id = T2.customer_id
WHERE room_id ='" & staff_lblid.Text & "'"
dr = sqlCmd.ExecuteReader
mysqlConn.Close()
我的数据库结构
表名:房间
房间号 | 房间号 | 房间状态 | 房型 | 率 | 客户ID
表名:客户
客户 ID | 来宾号 | 枣子 | 约会 | 全名 | 地址 | 联系电话 | 总计| 付费 | 平衡
解决方案
分解您的代码和 Sql 语句,您要求MySql
做的是:
- 插入新客户... - 这看起来不错
- 在房间表上设置客户 ID ... - 这是无效的 Sql
- 更新房间状态... - 这看起来不错。
再加上您如何生成 Sql 语句,您遇到问题是可以理解的。
我所做的是使用参数重写您的 Sql,这将有助于防止现在和将来出现许多问题,并将对表Customer
和Room
表的更改分解为同时执行的两个单独的 Sql 语句。
Using conn As New MySqlConnection(ConnectionString)
Dim insertCustomerSql As String = String.Empty
insertCustomerSql += "INSERT INTO CUSTOMER (guestno, datein, dateout, name, address, contactnum, total, paid, balance) "
insertCustomerSql += "VALUES (@guestNo, @dateIn, @dateOut, @name, @address, @contactNum, @total, @paid, @balance);"
Dim updateRoomSql As String = String.Empty
updateRoomSql += "UPDATE ROOM SET roomstatus = @roomStatus, customerid = LAST_INSERT_ID() WHERE id = @roomId;"
Dim sql As String = insertCustomerSql + Environment.NewLine + updateRoomSql
conn.Open()
Using command As New MySqlCommand(sql, conn)
command.Parameters.Add("guestNo", MySqlDbType.String).Value = 101
command.Parameters.Add("dateIn", MySqlDbType.Date).Value = DateTime.Now.Date
command.Parameters.Add("dateOut", MySqlDbType.Date).Value = DateTime.Now.Date.AddDays(5)
command.Parameters.Add("name", MySqlDbType.String).Value = "JayV"
command.Parameters.Add("address", MySqlDbType.String).Value = "My Home, England"
command.Parameters.Add("contactNum", MySqlDbType.String).Value = "+44 1234 5678"
command.Parameters.Add("total", MySqlDbType.Decimal).Value = 500
command.Parameters.Add("paid", MySqlDbType.Decimal).Value = 350
command.Parameters.Add("balance", MySqlDbType.Decimal).Value = 150
command.Parameters.Add("roomStatus", MySqlDbType.String).Value = "Occupied"
command.Parameters.Add("roomId", MySqlDbType.Int16).Value = 1
command.ExecuteNonQuery()
End Using
End Using
我还借此机会利用了其他一些好的做法,比如Using
积木。
希望这对您有所帮助。
推荐阅读
- database-design - 重复行也重复组吗?(1NF)
- excel - Aspose.Cells - 在 .Net Core 中签署 VBA 项目
- c# - 如何在日志中没有任何密码痕迹的情况下创建 Postgresql 用户?
- multithreading - 使用 atomic c++11 实现线程安全倒数为零
- c# - C# for 循环的语法和时间复杂度差异
- nuget-package - 从 launchSettings.json 调用 Nuget 包缓存中的可执行文件
- java - NumberFormatException:对于输入字符串:“2”
- algorithm - 与最少操作的一且仅一零比较
- sql-server - 我收到一条错误消息,提示消息 137、级别 15、状态 2、第 8 行必须声明标量变量“@UtilityID”
- python - 通过 Python 连接到 SQL Server Express 2017