【问题标题】:MySqlException was unhandled during UPDATE [closed]更新期间未处理 MySqlException [关闭]
【发布时间】:2017-04-06 01:33:51
【问题描述】:

请帮助我,当我进行更新时遇到错误!

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();

请帮忙解决这个问题!!对不起我的英语我来自巴西。我已经尝试了一切来做这个查询,但我完全不希望你们中的任何人能帮助我!

【问题讨论】:

  • 任何时候您“遇到错误”都必须告诉我们错误是什么。
  • 什么是错误??

标签: c# mysql


【解决方案1】:

在您的第二个查询中,您需要使用sql2.ExecuteNonQuery(); 代替sql2.ExecuteReader();

ExecuteNonQuery() 执行目录操作(例如, 查询数据库的结构或创建数据库对象,例如 作为表),或更改数据库中的数据而不使用 DataSet 通过执行 UPDATE、INSERT 或 DELETE 语句。该方法将返回受影响的行数。

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

一位syou在评论中提到错误不是因为ExecuteNonQuery,而是因为之前的Datareader,所以你必须在处理更新之前关闭它们。

【讨论】:

  • 如果您解释了为什么张贴者应该这样做,这将是一个更好的答案,因此它提供了信息而不仅仅是复制/粘贴解决方案。这将有助于发布者在未来避免同样的错误。
  • 我已经试过了,但是还是不行!看这张照片:prntscr.com/eszl0g
  • 错误信息告诉你该怎么做:关闭你之前通过DataReader的连接。
  • 什么代码可以做我想做的事?
【解决方案2】:

您正在使用 Datareader。 Datareader 将保持连接打开,直到它关闭。如果您为数据读取器使用连接,则不能将其用于执行非查询。

最好为更新创建一个新的连接和命令对象。

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

【讨论】:

  • 我该怎么做?你能帮我吗?我需要按行返回的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
相关资源
最近更新 更多