C# 连接没有关闭

C# 连接没有关闭,c#,asp.net,webforms,C#,Asp.net,Webforms,这让我头疼。我尝试了try和catch和finally以及其他一些东西,但这个错误不断出现。请找个人帮忙。 我的c#代码: 错误是: 连接没有关闭。连接的当前状态为“打开”。 描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源。 异常详细信息:System.InvalidOperationException:连接 没有关闭。连接的当前状态为“打开” 源错误: Line 50: string str = "SE

这让我头疼。我尝试了
try
catch
finally
以及其他一些东西,但这个错误不断出现。请找个人帮忙。 我的c#代码:

错误是:

连接没有关闭。连接的当前状态为“打开”。 描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源。
异常详细信息:System.InvalidOperationException:连接 没有关闭。连接的当前状态为“打开”

源错误:

Line 50:            string str = "SELECT PID, Pname, Gender, ContactNum, Category, Department, Ward, AdmitDate, DischargeDate, NumOfDays, CostOfTest, NumOfDocsVisited, DocFee, BedCost, TotalCost, GrandTotal FROM Patient";
Line 51:             cmd = new SqlCommand(str, con);
Line 52:                 con.Open();
Line 53:                 SqlDataAdapter adp = new SqlDataAdapter(cmd);
Line 54:                 DataTable dt = new DataTable();
堆栈跟踪:

[InvalidOperationException: The connection was not closed. The connection's current state is open.]
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +14
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +94
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +110
System.Data.SqlClient.SqlConnection.Open() +96
SMC.Billing.show() in e:\VS2013 projects\SMC\SMC\Billing.aspx.cs:52
SMC.Billing.Button3_Click(Object sender, EventArgs e) in e:\VS2013 projects\SMC\SMC\Billing.aspx.cs:97
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9628722
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724

使用块将连接包装在
中。这保证了它总是被关闭

using (var connection = new SqlConnection(connectionString))
{
  connection.Open();
  //Do stuff with the connection
}

在我看来,它似乎在试图告诉您,您正在尝试打开一个已经打开的连接

你可以试试(第52行)


使用
using
子句来确保您的连接被正确地处理和关闭。我如何以及在哪里可以使用它?在您的代码中,您在哪里使用
con
很明显,您正在使用全局连接,为什么不添加以下内容或检查
con
的以下状态调用Open方法之前,
con.Close()
。。但那是一种糟糕的方式。。我会做一个有条件的检查。。为了安全起见,使用(){}
将所有sql对象包装在
周围,这将确保自动处理对象和底层对象等。我已经尝试过了
using (var connection = new SqlConnection(connectionString))
{
  connection.Open();
  //Do stuff with the connection
}
if (con.State == ConnectionState.Closed) con.Open;