c#连接未关闭,连接的当前状态已打开

时间:2017-11-20 15:57:44

标签: c# database

我正在尝试将我的数据添加到数据库中,但是无论何时它都会显示异常消息“连接未关闭”。 我已经搜索了一些解决方案示例

using (SqlConnection connection = new SqlConnection(connectionString))
{
 //etc...
}

但它不起作用。

这是代码

SqlConnection con = new SqlConnection(@"connecting string");

private void btnAdd_Click(object sender, EventArgs e)
{      
    try
    {
        con.Open();
        SqlCommand cmd = con.CreateCommand();
        cmd.CommandType = CommandType.Text;
        //cmd.CommandText = " insert into Manipulate values('" + txtICNO.Text + "','" + txtName.Text + "','" + txtDisease.Text + "','" + txtContact.Text + "','" + txtHistory.Text + "','" + txtAddress.Text + "')";
        cmd.CommandText = "insert into Manipulate (ICNO,Name,Disease,Contact,History,Address,Gender) values(@ICNO,@Name,@Disease,@Contact,@History,@Address,@Gender)";
        cmd.Parameters.Clear();
        cmd.Parameters.AddWithValue("@ICNO", txtICNO.Text);
        cmd.Parameters.AddWithValue("@Name", txtName.Text);
        cmd.Parameters.AddWithValue("@Disease", txtDisease.Text);
        cmd.Parameters.AddWithValue("@Contact", txtContact.Text);
        cmd.Parameters.AddWithValue("@History", txtHistory.Text);
        cmd.Parameters.AddWithValue("@Address", txtAddress.Text);

        if (rdbMale.Checked)
            cmd.Parameters.AddWithValue("@gender", "Male");
        else
            cmd.Parameters.AddWithValue("@gender", "Female");
        cmd.ExecuteNonQuery();
        displayData();
        MessageBox.Show("record add successfully");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        con.Close();
    }
}

2 个答案:

答案 0 :(得分:0)

您的连接在其他位置打开,并在btnAdd_Click中关闭。 另外,我不知道displayData()会发生什么 将新的Connection声明移到btnAdd_Click中并附上 {using}块中的所有新对象实例 然后,查看displayData()内的内容。

private void btnAdd_Click(object sender, EventArgs e)
{
   try
   {
      using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(@"connecting string"))
      {
         con.Open();
         using (System.Data.SqlClient.SqlCommand cmd = con.CreateCommand())
         {
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.CommandText = "insert into Manipulate (ICNO,Name,Disease,Contact,History,Address,Gender) " + 
                              "values(@ICNO,@Name,@Disease,@Contact,@History,@Address,@Gender)";
            cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@ICNO", txtICNO.Text);
            cmd.Parameters.AddWithValue("@Name", txtName.Text);
            cmd.Parameters.AddWithValue("@Disease", txtDisease.Text);
            cmd.Parameters.AddWithValue("@Contact", txtContact.Text);
            cmd.Parameters.AddWithValue("@History", txtHistory.Text);
            cmd.Parameters.AddWithValue("@Address", txtAddress.Text);

            if (rdbMale.Checked)
               cmd.Parameters.AddWithValue("@gender", "Male");
            else
               cmd.Parameters.AddWithValue("@gender", "Female");
            cmd.ExecuteNonQuery();
         }
      }

   }
   catch (Exception ex)
   {
      MessageBox.Show(ex.Message);
      return;
   }

      displayData();
      MessageBox.Show("record add successfully");

}

答案 1 :(得分:0)

您可以添加以下条件:

if(con.State==ConnectionState.Close)
{
    con.Open();
}

这不会重新打开连接。