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;