请帮助我,当我更新时出现错误!
bdDataSet = new DataSet();
//Define string de conexão
bdConn = new MySqlConnection("Server=xxxxxxxxx;Database=xxxxxxx;Uid=xxxxxxx;Pwd=xxxxxxxx");
var command = bdConn.CreateCommand();
//Abre conecção
try
{
bdConn.Open();
}
catch
{
MessageBox.Show("Impossível estabelecer conexão");
}
//Verifica se a conexão está aberta
if (bdConn.State == ConnectionState.Open)
{
//ENCONTRA USUARIO
command.CommandText = "SELECT * FROM users WHERE email=@email and senha=@senha";
command.Parameters.Add("@email", MySqlDbType.VarChar).Value = textBoxUser.Text;
command.Parameters.Add("@senha", MySqlDbType.VarChar).Value = textBoxPass.Text;
MySqlDataReader reader = command.ExecuteReader();
if (reader.Read())
{
string email = reader.GetString("email");
if (Convert.IsDBNull(reader["hd_id"]))
{
//ADD HD ID NO D
MySqlCommand sql2 = new MySqlCommand("UPDATE users SET hd_id=@hdid WHERE email=@email", bdConn);
sql2.Parameters.Add("@hdid", MySqlDbType.VarChar).Value = HardDrive.GetHDDSerialNo();
sql2.Parameters.Add("@email", MySqlDbType.VarChar).Value = email;
sql2.ExecuteReader();
}
if (reader.GetString("hd_id") != null)
{
MessageBox.Show("Tem HD");
}
}
else
{
MessageBox.Show("Usuários e/ou Senha Invalido");
}
bdConn.Close();
}
所以我在这一行中有错误
sql2.ExecuteReader();
请帮助解决这个问题!!对不起我的英语我来自巴西。我已经尝试了一切来做这个查询,但我完全不希望你们中的任何人能帮助我!
答案 0 :(得分:1)
如果是您的第二个查询,则需要使用sql2.ExecuteNonQuery();
代替sql2.ExecuteReader();
。
ExecuteNonQuery()执行目录操作(例如, 查询数据库的结构或创建数据库对象 如表),或更改数据库中的数据而不使用 通过执行UPDATE,INSERT或DELETE语句来实现DataSet。该方法将返回受影响的行数。
ExecuteReader()返回一个可以遍历整个结果集的对象。
注释中提到的一个syou,错误不是因为ExecuteNonQuery,而是因为之前的Datareader,所以你必须在处理更新之前关闭它们。
答案 1 :(得分:0)
您正在使用Datareader。 Datareader将保持连接打开直至关闭。如果您使用数据读取器的连接,则不能将其用于执行非查询。
最好为更新创建新的连接和命令对象。
https://www.codeproject.com/Articles/43438/Connect-C-to-MySQL