Mysql 在VB.Net中将内部联接与插入和更新一起使用时出错

Mysql 在VB.Net中将内部联接与插入和更新一起使用时出错,mysql,.net,vb.net,Mysql,.net,Vb.net,我正在尝试使用内部联接进行插入和更新,但每当我保存它时,它会给我一个关于集合的错误,我无法找出它到底出了什么问题。这是我第一次使用内部联接,我真的需要帮助 mysqlConn.Open() sqlCmd = New Odbc.OdbcCommand sqlCmd.Connection = mysqlConn sqlCmd.CommandText = "INSERT INTO customer (guestno, datein, dateout, fullname, address, conta

我正在尝试使用内部联接进行插入和更新,但每当我保存它时,它会给我一个关于集合的错误,我无法找出它到底出了什么问题。这是我第一次使用内部联接,我真的需要帮助

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 |客人编号|日期输入|日期输出|全名|地址|联系人编号|总计|已付|余额


分解代码和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
    
    我还借此机会利用了其他一些好的实践,比如
    使用


    希望这对您有所帮助。

    错误说明了什么?你有没有检查过需要时所有的替换修剪是否正确地用单引号括起来?我添加了一些屏幕截图错误。请查看当前的答案并将其标记为“答案”,如果可能的话,请向上投票