我正在使用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
对象来执行查询,我在这段代码中做错了什么?
答案 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()