C# 连接当前状态为连接错误消息
我一直随机得到这个错误: System.Web.Services.Protocols.SoapException:System.Web.Services.Protocols.SoapException:服务器无法处理请求。-->System.InvalidOperationException:连接未关闭。连接的当前状态为“正在连接” 它抱怨的代码如下:C# 连接当前状态为连接错误消息,c#,ado.net,datatable,C#,Ado.net,Datatable,我一直随机得到这个错误: System.Web.Services.Protocols.SoapException:System.Web.Services.Protocols.SoapException:服务器无法处理请求。-->System.InvalidOperationException:连接未关闭。连接的当前状态为“正在连接” 它抱怨的代码如下: DataSet ds = new DataSet(); cn = new SqlConnection(GetD
DataSet ds = new DataSet();
cn = new SqlConnection(GetDBConnectionString());
using (cn)
{
try
{
SqlCommand cmd = new SqlCommand("uspGetNavigationItems", cn);
cmd.CommandType = CommandType.StoredProcedure;
cn.Open();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(ds, "NavItems");
}
catch (Exception ex)
{
ds = null;
throw ex;
}
finally
{
if (cn.State != ConnectionState.Closed)
{
cn.Close();
}
}
}
if (ds.Tables.Count > 0)
{
if (ds.Tables[0].Rows.Count > 0)
{
return ds.Tables[0];
}
else
{
return null;
}
}
else
{
return null;
}
我不明白问题在哪里,为什么它说连接正在连接,当我终于有了一个解决办法的时候。是因为我正在使用Finally to close和using语句,该语句也应该关闭它吗?同样,这是随机发生的,但并不总是如此,这就是为什么我不确定发生了什么
谢谢。当您使用
语句时,去掉最后一个块将负责关闭连接当您使用语句时,去掉最后一个块将负责关闭连接如果您使用使用语句
因为它将关闭
它将从处理
隐式关闭
经验法则:对每个实现的类(如连接、数据适配器、命令)使用using语句。另一方面,数据集
或数据表
不会手动或通过使用来实现它
但变化:
cn = new SqlConnection(GetDBConnectionString());
using (cn)
{
//code
}
致:
这将转化为:
SqlConnection cn = new SqlConnection(GetDBConnectionString());
try
{
//code
}
finally
{
if (cn != null)
((IDisposable)cn).Dispose();
}
旁注:throw
而不是throw ex
将保留堆栈跟踪。使用throw ex
可以隐藏异常的原始源
如果使用using语句,则不需要最后关闭连接,因为它将从dispose
隐式关闭它
经验法则:对每个实现的类(如连接、数据适配器、命令)使用using语句。另一方面,数据集
或数据表
不会手动或通过使用来实现它
但变化:
cn = new SqlConnection(GetDBConnectionString());
using (cn)
{
//code
}
致:
这将转化为:
SqlConnection cn = new SqlConnection(GetDBConnectionString());
try
{
//code
}
finally
{
if (cn != null)
((IDisposable)cn).Dispose();
}
旁注:throw
而不是throw ex
将保留堆栈跟踪。使用throw ex
可以隐藏异常的原始源
沿着这些线:命令对象也应该在using语句中。@chrislive:相应地编辑了我的答案。沿着这些线:命令对象也应该在using语句中。@chrislive:相应地编辑了我的答案。