该错误消息在其他线程中也可用,但就我而言,则有所不同。
你调用的对象是空的。查询以下select语句时。里面有什么问题?

 Dim con As New MySqlConnection(ConString)
            Dim sql As String
            Dim idno As Integer
            sql = "select client_id from car_rent where car_id = @carid"
            cmd.Parameters.AddWithValue("@carid", carid.Text.Trim)
            cmd = New MySqlCommand(sql, con)
            idno = cmd.ExecuteScalar()
            If (idno > 0) Then
                MsgBox("The Car is already Rented!", MsgBoxStyle.Exclamation, "Car Rental System")
                Return
            End If

最佳答案

切换这两行的顺序

cmd = New MySqlCommand(sql, con)
cmd.Parameters.AddWithValue("@carid", carid.Text.Trim)


另外,执行命令的行似乎也可以正常运行,因为您使用的是Option Strict Off,我建议更改为Option Strict On。在短期内,您必须解决许多问题,但是它允许更好的编码实践

 idno = CType(cmd.ExecuteScalar(), Integer)


但是,如果上面的命令找不到与传递的参数匹配的记录,则ExecuteScalar返回Nothing,因此您需要测试这种情况

Dim result = cmd.ExecuteScalar()
if result IsNot Nothing Then

    idno = CType(result, Integer)


并且,当然,连接应该在之前打开,所以总结所有内容

Dim sql = "select client_id from car_rent where car_id = @carid"
Using con As New MySqlConnection(ConString)
Using cmd = New MySqlCommand(sql, con)
   con.Open()

   cmd.Parameters.AddWithValue("@carid", carid.Text.Trim)
   Dim result = cmd.ExecuteScalar()
   if result IsNot Nothing Then
       Dim idno = CType(result, Integer)
       If (idno > 0) Then
            MsgBox("The Car is already Rented!", MsgBoxStyle.Exclamation, "Car Rental System")
            Return
       End If
   End If
End Using
End Using


除非您需要idno变量用于其他目的,否则很可能足以对ExecuteScalar的结果进行Nothing测试以做出决定。

关于mysql - Select语句在VB.Net中使用MySQL出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22007660/

10-14 12:59