我想知道这个asp.net代码是否有问题:
mydatareader = mycmd.executeReader()
if myDataReader.HasRow then
// Do something
end if
myConnection.Close()
如果我避免调用“MyDataReader.Close()”,那么连接是否会关闭? 我问这个是因为我假设如果调用“MyConn.Close”它会自动关闭相关的datareader ......或者我错了?
由于
答案 0 :(得分:3)
执行此类操作的最佳做法如下:
using(SqlConnection connection = new SqlConnection(connStr)) {
connection.Open();
SqlCommand command = new SqlCommand(connection, "SELECT...");
SqlDataReader reader = command.ExecuteReader();
// Fill your container objects with data
}
using声明:
定义一个范围,在该范围之外将放置一个或多个对象。
因此,您可以放心,在退出使用块时,您的connection
,command
和reader
变量将会被关闭并进行相应处理。
答案 1 :(得分:3)
您必须关闭阅读器而不是关闭连接。看看这里: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close.aspx
答案 2 :(得分:0)
如果既不关闭数据读取器也不关闭连接,垃圾收集器将为您完成。另一方面,这可能会影响您的应用程序的性能。
答案 3 :(得分:0)
我不是很确定,但我总是使用try-catch-finally块来进行数据库操作:
using (SqlConnection cnn = new SqlConnection(ConnectionString))
{
using (SqlCommand cmmnd = new SqlCommand("SELECT Date();", cnn))
{
try
{
cnn.Open();
using (SqlDataReader rdr = cmmnd.ExecuteReader())
{
if (rdr.Read()) { result = rdr[0].ToString(); }
}
}
catch (Exception ex) { LogException(ex); }
finally { cnn.Close(); }
}
}