在 c# 中使用语句不会关闭连接。为什么?

Using statement in c# does not close the connection. Why?

我正在创建一个 crud gridview 网页,我在我的代码中使用 ASP.NET 中的 "using" 语句,因为我了解到它会自动转换其中的代码,所以我不会必须使用 connect.Close();

但是,我仍然收到错误消息:

System.InvalidOperationException: The connection was not closed. The connection's current state is open.

我试着输入 connection.Close(); 但仍然出现同样的错误。

这是我的代码。谁能帮我解决这个问题?非常感谢

void PopulateGridView()
{
    using (connect)
    {
        connect.Open();
        adapter = new SqlDataAdapter("SELECT * FROM RetailInfo", connect);
        table = new DataTable();
        adapter.Fill(table);
    }

    if(table.Rows.Count > 0)
    {
        RetailInfoGridView.DataSource = table;
        RetailInfoGridView.DataBind();
    } 
    else
    {
        table.Rows.Add(table.NewRow());
        RetailInfoGridView.DataSource = table;
        RetailInfoGridView.DataBind();
        RetailInfoGridView.Rows[0].Cells.Clear();
        RetailInfoGridView.Rows[0].Cells.Add(new TableCell());
        RetailInfoGridView.Rows[0].Cells[0].ColumnSpan = table.Columns.Count;
        RetailInfoGridView.Rows[0].Cells[0].Text = "No record Found";
    }
}

一个简单的修复在connect.Open()之前,您可以执行以下操作:

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

此外,正如 Zohar Peled 指出的那样,使用 using (var connect = new SqlConnection(connectionString)) 代替在 class 级别声明对象是很好的。

这样就没有泄漏,连接对象会在工作完成后立即处理。

替换这部分

 using (connect)
    {
       connect.Open();
        adapter = new SqlDataAdapter("SELECT * FROM RetailInfo", connect);
        table = new DataTable();
        adapter.Fill(table);
     }

using (connect)
    {
        if (connect.State == ConnectionState.Open)
        connect.Close();
        connect.Open();
        adapter = new SqlDataAdapter("SELECT * FROM RetailInfo", connect);
        table = new DataTable();
        adapter.Fill(table);
        connect.Close();
    }