2017-04-06 15 views
-3

请帮助我,当我更新e时出错!更新过程中未处理MySqlException

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 protected] and [email protected]"; 
    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 [email protected] WHERE [email protected]", 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(); 

请helpe做解决这个问题!对不起,我的英语来自巴西。我已经尽了一切努力来做这个查询,但我根本不能希望你们中的任何人都能帮助我!

+0

任何时候你“出现错误”,你必须告诉我们是什么错误。 –

+0

什么是错误? –

回答

1

在这里您的第二个查询的情况下,您需要使用sql2.ExecuteNonQuery();而不是sql2.ExecuteReader();

ExecuteNonQuery()执行编录操作(例如, 查询数据库的结构或创建数据库对象, 表),或通过执行UPDATE改变在数据库中的数据,而无需使用 数据集,INSERT或DELETE语句。该方法将返回受影响的行数。

ExecuteReader()返回可遍历整个结果集的对象。

syou在评论中提到错误不是因为ExecuteNonQuery,这是因为之前的Datareader,因此您必须在处理更新之前关闭它们。

+1

如果你解释为什么海报应该这样做,这将是一个更好的答案,所以它提供的信息而不仅仅是一个复制/粘贴解决方案。这将有助于海报在未来避免这种相同的错误。 –

+0

我已经尝试过,但它也不起作用!在这张图片中看到:http://prntscr.com/eszl0g –

+0

错误消息告诉你该做什么:关闭你以前的连接,这是通过一个'DataReader'。 –

0

您正在使用Datareader。数据读取器将保持连接处于打开状态直至关闭。如果您使用Data Reader连接,则不能将其用于执行非查询。

更好地创建一个新的连接和命令对象进行更新。

https://www.codeproject.com/Articles/43438/Connect-C-to-MySQL

+0

我该怎么做?你能帮助我吗?,我需要在行中返回的值。 –