使用同一MySQLCommand执行命令时遇到致命错误

使用同一MySQLCommand执行命令时遇到致命错误,sql,vb.net,Sql,Vb.net,我使用MySQLCommand检查用户输入的某个字段是否正确。在下面的代码中,我检查用户是否已经在数据库中注册。现在,电子邮件检查工作正常,但当我尝试检查用户名字段时,出现以下错误: 命令执行期间遇到致命错误 代码: 您如何看到我使用相同的MysqlCommand对象执行查询,我在代码中做错了什么?您正在向第一个命令添加两个参数,即使第二个命令属于第二个查询。因此,将其从第一个中删除,然后添加到第二个中: Dim query As String = "SELECT Count(email) fr

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

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

代码:


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

您正在向第一个命令添加两个参数,即使第二个命令属于第二个查询。因此,将其从第一个中删除,然后添加到第二个中:

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()
您无需每次都创建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()

你从哪里得到的错误??我猜在第二个MysqlCommand.ExecuteScalar中??是的,正如我在主题中检查用户名字段时所说的那样。。但是问题现在已经解决了,谢谢你。所以我不能添加两个参数并在下次重用它?现在似乎可以工作了,谢谢,祝您愉快:@Jss:您正在使用新的MySqlCommand创建一个新的MySqlCommand。当然,这也会清除您添加到第一个实例中的参数。但是否可以使用相同的MySqlCommand并指定新查询?@Jss:这是一种糟糕的做法,通过创建新实例,您可以确保不会得到任何不必要的副作用,如错误的参数、值或查询。因此,要么使用另一个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()