cho*_*ell 5 c# asp.net static idisposable sqlconnection
鉴于方法:
internal static DataSet SelectDataSet(String commandText, DataBaseEnum dataBase)
{
var dataset = new DataSet();
SqlConnection sqlc = dataBase == DataBaseEnum.ZipCodeDb
? new SqlConnection(ConfigurationManager.AppSettings["ZipcodeDB"])
: new SqlConnection(ConfigurationManager.AppSettings["WeatherDB"]);
SqlCommand sqlcmd = sqlc.CreateCommand();
sqlcmd.CommandText = commandText;
var adapter = new SqlDataAdapter(sqlcmd.CommandText, sqlc);
adapter.Fill(dataset);
return dataset;
}
Run Code Online (Sandbox Code Playgroud)
为什么sqlc(SqlConnection)在调用方法超出范围后没有处理/关闭,或者sqlc没有更多的引用?
编辑1: 即使将其包装在使用中,我仍然可以看到连接使用(我已关闭连接池):
SELECT DB_NAME(dbid) as 'Database Name',
COUNT(dbid) as 'Total Connections'
FROM sys.sysprocesses WITH (nolock)
WHERE dbid > 0
GROUP BY dbid
Run Code Online (Sandbox Code Playgroud)
编辑2: 在我从这里得到的帮助下进行一些调试 - 答案是有人硬编码连接字符串与池.感谢所有的帮助 - 如果可以的话,我会将所有回复标记为答案.
And*_*are 19
C#的垃圾收集是非确定性的,但语言确实提供了资源处理的确定性结构,如下所示:
using (SqlConnection connection = new SqlConnection(...))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
这将创建一个try/finally块,该块将确保无论方法中发生什么,都将处置连接对象.你真的应该IDisposable在这样的使用块中包装任何类型的实例,因为它将确保负责任的资源管理(非托管资源,如数据库连接),并且它还为您提供了您正在寻找的确定性控制.
| 归档时间: |
|
| 查看次数: |
2706 次 |
| 最近记录: |