为什么我到那里已经有一个与这个连接关联的开放式数据加载器必须先关闭错误?

时间:2016-02-02 12:23:35

标签: c# mysql

try
{
        string log = "SELECT * from rfidprototype.account where username ='" + USERNAME + "' and password = '" + PASS + "';";

        MySqlCommand cmd = new MySqlCommand(log, SQLconn);
        MySqlDataReader dRead;

        dRead = cmd.ExecuteReader();

        if (DRead.Read())
        {
            MenuHere form = new MenuHere();

            form.Show();
            form.ManageTile.Enabled = false;

            SQLconn.Close();
            DRead.Close();
        }
        else
        {
            MessageBox.Show("Incorrect Username or Password!");
            DiriLogin form = new DiriLogin();
            form.ShowDialog();
        }
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

1 个答案:

答案 0 :(得分:0)

在您的情况下,您尝试在阅读阅读器时关闭连接。

不要手动使用CloseDispose方法,而是使用using statement自动处理您的连接,命令和阅读器。

但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

并且将您的密码存储为纯文本。阅读:Best way to store password in database

using(var SQLconn = new MySqlConnection(conString))
using(var cmd = SQLconn.CreateCommand())
{
    // Set your CommandText property.
    using(var dRead = cmd.ExecuteReader())
    {
        // Do your stuff
    }
}

最后,PASSWORD在MySQL中是reserved keyword可能需要在`字符之间使用它,具体取决于您的数据库管理器是否区分大小写。