【发布时间】:2012-05-08 21:38:44
【问题描述】:
我发现我遇到了一些网站连接池问题,我正在跟踪这些问题。我知道要寻找的一件事是确保所有 SQLDataReader 都已关闭,但我已经完成并确保它们已关闭。我脑海中突然出现的一个问题是关于返回 SQLDataReaders 的方法以及它们如何关闭(或不关闭)。
以下是我的设置方法和一些示例方法:
public static SqlDataReader ExecuteReader(SqlCommand cmd)
{
SqlConnection c = new SqlConnection(Properties.Settings.Default.DatabaseConn);
cmd.Connection = c;
c.Open();
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
然后我有一个使用 'ExecuteReader()' 的方法
public static SqlDataReader GetData()
{
SqlCommand Query = new SqlCommand("select * from SomeTable");
return ExecuteReader(Query);
}
现在说我有另一个调用“GetData”的方法。我显然简化了事情。
public static SqlDataReader GetMoreData()
{
return GetData;
}
所以我的问题是,当我这样调用“GetMoreData”时
SqlDataReader dr = GetMoreData();
//do some stuff with 'dr'
dr.close();
all 我的 SqlDataReaders 和连接是否正确关闭?
谢谢!
【问题讨论】:
-
您说“all”,但您只有一个阅读器和一个连接。从查看您的代码来看,如果没有引发异常,则在关闭阅读器时都应该关闭。
-
如果您的
//do some stuff with 'dr'部分抛出异常,那么,不,您的阅读器没有正确关闭。 dknaack 的回答通过告诉您使用using语句来修复该错误。 -
我看到您使用的是静态函数。您不会在真实代码中使用任何静态字段来放置阅读器或连接吗?
标签: c# database-connection connection-pooling sqldatareader