使用相同的MySQLCommand在命令执行期间遇到致命错误

时间:2015-12-11 08:45:01

标签: sql vb.net

我正在使用MySQLCommand检查用户输入的某个字段是否正确。在下面的代码中,我检查用户是否已在数据库中注册。现在电子邮件检查工作正常,但当我尝试检查用户名字段时,我收到此错误:

  

命令执行期间遇到致命错误

代码:

Using dbCon As MySqlConnection = establishConnection()

        Try

            dbCon.Open()

            Dim query As String = "SELECT Count(email) from users WHERE email = @emailp"
            Dim MysqlCommand = New MySqlCommand(query, dbCon)

            With MysqlCommand.Parameters
                .AddWithValue("@emailp", email)
                .AddWithValue("@usernamep", username)
            End With

            Dim count = MysqlCommand.ExecuteScalar()

            If Convert.ToUInt32(count) > 0 Then
                MessageBox.Show("User already registered")
                exists = True
            End If

            query = "SELECT Count(username) from user_settings WHERE username = @usernamep"

            MysqlCommand = New MySqlCommand(query, dbCon)  

            count = MysqlCommand.ExecuteScalar()

            If Convert.ToInt32(count) > 0 Then
                MessageBox.Show("Username already exists")
                exists = True
            End If

        Catch myerror As MySqlException

            MessageBox.Show(myerror.Message)

        Finally

            dbCon.Dispose()

        End Try
    End Using

如何看待我使用相同的MysqlCommand对象来执行查询,我在这段代码中做错了什么?

2 个答案:

答案 0 :(得分:0)

即使第二个参数属于第二个查询,您也要向第一个命令添加两个参数。所以从第一个中删除它并将其添加到第二个:

Dim query As String = "SELECT Count(email) from users WHERE email = @emailp"
Dim MysqlCommand = New MySqlCommand(query, dbCon)
With MysqlCommand.Parameters
    .AddWithValue("@emailp", email)
End With
Dim count = MysqlCommand.ExecuteScalar()

' .... '

query = "SELECT Count(username) from user_settings WHERE username = @usernamep"
MysqlCommand = New MySqlCommand(query, dbCon)  ' this clears also the parameters previously added '
With MysqlCommand.Parameters
   .AddWithValue("@usernamep", username)
End With
count = MysqlCommand.ExecuteScalar()

答案 1 :(得分:0)

每次都不需要创建MysqlCommand对象,只需清除参数并添加新的参数(如下所示)

dbCon.Open()
Dim query As String = "SELECT Count(email) from users WHERE email = @emailp"
Dim MysqlCommand = New MySqlCommand(query, dbCon)
MysqlCommand.Parameters.AddWithValue("@emailp", email)
Dim count = MysqlCommand.ExecuteScalar()

            /* Your code*/

 query = "SELECT Count(username) from user_settings WHERE username = @usernamep"
 MysqlCommand.CommandText = query /* <- assigning new select query */
 MysqlCommand.Parameters.Clear() /*'<-- just clear the existing parameter */
 MysqlCommand.Parameters.AddWithValue("@usernamep", username)/*'<- add new one*/
 count = MysqlCommand.ExecuteScalar()