请帮忙!.net SqlConnection即使在使用时也不会被关闭{}
背景信息
我有一个访问SQL Server 2005数据库WPF应用程序。数据库在运行应用程序的计算机上本地运行。
无处不在我使用Linq DataContext我使用一个使用{}语句,并传入一个函数的结果,该函数返回一个SqlConnection对象,该对象在返回到DataContext构造函数之前已经打开并且使用它执行了SqlCommand。即
// In the application code
using (DataContext db = new DataContext(GetConnection()))
{
... Code
}
其中的getConnection看起来像这样(我已经去掉了从功能的“绒毛”,以使其更具可读性,但就是缺少无其他功能)。
// Function which gets an opened connection which is given back to the DataContext constructor
public static System.Data.SqlClient.SqlConnection GetConnection()
{
System.Data.SqlClient.SqlConnection Conn = new System.Data.SqlClient.SqlConnection(/* The connection string */);
if (Conn != null)
{
try
{
Conn.Open();
}
catch (System.Data.SqlClient.SqlException SDSCSEx)
{
/* Error Handling */
}
using (System.Data.SqlClient.SqlCommand SetCmd = new System.Data.SqlClient.SqlCommand())
{
SetCmd.Connection = Conn;
SetCmd.CommandType = System.Data.CommandType.Text;
string CurrentUserID = System.String.Empty;
SetCmd.CommandText = "DECLARE @B VARBINARY(36); SET @B = CAST('" + CurrentUserID + "' AS VARBINARY(36)); SET CONTEXT_INFO @B";
try
{
SetCmd.ExecuteNonQuery();
}
catch (System.Exception)
{
/* Error Handling */
}
}
return Conn;
}
我不认为该应用程序是一个WPF一个对我有问题的任何影响。
随着DataContext的在SQL Server Management Studio中我仍然可以看到打开的连接负载与布置我有
尽管SqlConnection的问题:
status : 'Sleeping'
command : 'AWAITING COMMAND'
last SQL Transact Command Batch : DECLARE @B VARBINARY(36); SET @B = CAST('GUID' AS VARBINARY(36)); SET CONTEXT_INFO @B
最终连接池已经用完,应用程序无法继续。
所以我只能得出结论,以某种方式运行SQLCommand来设置Context_Info意味着连接不会在DataContext处置时丢弃。
任何人都可以发现任何显而易见的事情:当它们被使用的DataContext被丢弃时,会阻止连接被关闭和处置吗?
您可以添加一个部分类来扩展自动生成的数据上下文;无需子类。 – 2008-11-06 15:10:22