我想知道这个asp.net代码是否有问题:
mydatareader = mycmd.executeReader()
if myDataReader.HasRow then
// Do something
end if
myConnection.Close()
如果我避免调用“MyDataReader.Close()”,连接会关闭吗?我问这个是因为我假设如果调用“MyConn.Close”它会自动关闭相关的数据读取器......还是我错了?
谢谢
我想知道这个asp.net代码是否有问题:
mydatareader = mycmd.executeReader()
if myDataReader.HasRow then
// Do something
end if
myConnection.Close()
如果我避免调用“MyDataReader.Close()”,连接会关闭吗?我问这个是因为我假设如果调用“MyConn.Close”它会自动关闭相关的数据读取器......还是我错了?
谢谢
执行此类操作的最佳实践如下:
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
变量将被关闭并相应地处置。
您必须关闭阅读器而不是关闭连接。看看这里:http: //msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close.aspx
如果您既不关闭数据读取器也不关闭连接,垃圾收集器将为您完成。另一方面,这可能会影响您的应用程序的性能。
我不确定,但我总是使用 try-catch-finally 块进行 db 操作:
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(); }
}
}