c# - mysqldatareader连接已关闭

标签 c# mysql winforms

我不知道为什么我的连接不断关闭,而没有任何东西可以关闭连接。我尝试将它们包含在 using block 中,但无济于事。有没有更好的方法将单个选择查询传递到字符串

private void button2_Click(object sender, EventArgs e)
{


    string username = txtUsername.Text;
    string password = txtPassword.Text;
    string query = "SELECT isActive FROM tblUser WHERE username = ?username AND password = ?password";

    MySqlCommand cmd = new MySqlCommand(query, con.connection);

    cmd.Parameters.AddWithValue("?username", username);
    cmd.Parameters.AddWithValue("?password", password);
    con.connection.Open();
    MySqlDataReader mdr = cmd.ExecuteReader();

    string isActive="";
    string updatequery = "UPDATE tbluser SET DateLastLogin= '" + DateTime.Today.ToString("dd-mm-yy") + "',TimeLastLogin = '" + DateTime.Now.TimeOfDay + "', IsActive = 1 WHERE username = ?username";
    if (mdr.HasRows)
    {
        if(con.connection.State == ConnectionState.Closed)con.connection.Open();
        while (mdr.Read())
        {
            isActive = mdr[0].ToString();
            if (isActive.Equals("1"))
            {
                MessageBox.Show("This user is already logged in!");
            }
            else
            {
                MySqlCommand updatecmd = new MySqlCommand(updatequery, con.connection);

                con.OpenConnection();
                updatecmd.Parameters.AddWithValue("?username", username);
                updatecmd.ExecuteNonQuery();
                pnlLogin.Hide();
                pnlMenu.Show();
                MessageBox.Show("Welcome " + username);

            }

        }

    }
    else
    {
        MessageBox.Show("Invalid user credentials.");
    }



}

最佳答案

由于您没有关闭连接(这是错误的),因此您不需要验证您的连接是否已关闭即可打开它,因此您需要删除此连接:

if(con.connection.State == ConnectionState.Closed)con.connection.Open();`

此外,您不需要再次打开连接,我相信正在关闭您的连接,因为您正在使用 con.OpenConnection(); 重新打开它当你的!isActive.Equals("0") 。尝试删除 con.OpenConnection();并检查它。

如果您在提供的此代码后面的行中没有任何新查询,则最好 .Close()您的连接。

关于c# - mysqldatareader连接已关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46295508/

相关文章:

c# - 如何动态获取文本框中datagridview列的总和

c# - html 标签的 EnableViewState

c# - 平衡导向图

mysql - 其他 RDBMS(非 SQL Server)中 OUTER APPLY 的模拟

python - 在python中使用多个值调用sqlalchemy中的exists()

winforms - Clickonce 请求许可协议(protocol)

c# - 如何将 0 分配给整个数组

c# - 派生类数组,调用方法?

python - 可移植远程连接将数据从 MySQL 提取到 Excel

c# - 防止用户调整窗口/表单大小