猿问

MySQL 连接没有关闭

我现在在我的项目中碰壁了。我有一个带有一些列表框的表单和添加按钮。当我点击添加按钮时,我得到一个带有文本框、确定和取消按钮的小对话框。该应用程序已连接到 MySQL 数据库。因此,每当文本更改时,程序都会检查该名称是否存在于数据库中,禁用“确定”按钮,如果名称存在,则文本框变为红色,否则将它们恢复正常。当我正在写作并且名称不存在时,它可以正常工作,并且当它存在时,它会变成红色,就像它应该的那样。这就是问题所在。变红后,即使输入有效名称,也不会恢复正常。


这是代码:


private void DialogTxb_TextChanged(object sender, EventArgs e)

{

    //ConnexionData class where i do all the SQL manipulation

    MySqlDataReader selection = ConexionData.CheckSectionName(DialogTxb.Text);

    while (selection.Read())

    {

        if (selection.HasRows)

        {

            DialogOk.Enabled = false;

            toolTip1.Show("La section existe", TooltibLb);

            DialogTxb.BackColor = System.Drawing.ColorTranslator.FromHtml("#ffaaaa");

        }

        else

        {

            toolTip1.Hide(TooltibLb);

            DialogTxb.BackColor = Color.White;

            DialogOk.Enabled = true;

        }

    }

    ConexionData.ConexionClose();//Method to close connection

}

我想我知道问题出在哪里,但不知道它为什么会发生以及如何解决它。如果我只是退出表单并尝试执行其他任何操作,例如从列表框中选择另一个元素将触发某些数据库交互,则程序关闭和 Visual Studio 会向我提供有关错误的信息:“连接已打开”。我试图在代码的其他时刻关闭,在互联网上寻找一些解决方案,尝试过MysqlConection.ClearAllPools(),仍然是同样的问题。


Connexion 在应用程序的其他部分正确打开和关闭。


感谢您的关注。


陪伴而非守候
浏览 258回答 2
2回答

智慧大石

如果连接没有关闭,那么您可以在执行方法“CheckSectionName()”之前尝试调用 close() 连接或 sqldatareader。FYR 以下是一些示例,如果有帮助,请告诉我。方法一:    System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection();     if(sqlConn.State!= System.Data.ConnectionState.Closed)        {           sqlConn.Close();       } System.Data.SqlClient.SqlDataReader SqlReader= new System.Data.SqlClient.SqlDataReader();                    if(!SqlReader.IsClosed)                    {                        SqlReader.Close();                    }    MySqlDataReader selection = ConexionData.CheckSectionName(DialogTxb.Text);方法二:我们可以使用“using”子句using (MySqlDataReader selection = ConexionData.CheckSectionName(DialogTxb.Text))方法 3: 将 close() 和 dispose() 添加到 finally 块中。
随时随地看视频慕课网APP
我要回答