1

我想知道这个asp.net代码是否有问题:

mydatareader = mycmd.executeReader()
if myDataReader.HasRow then
      // Do something
end if
myConnection.Close()

如果我避免调用“MyDataReader.Close()”,连接会关闭吗?我问这个是因为我假设如果调用“MyConn.Close”它会自动关闭相关的数据读取器......还是我错了?

谢谢

4

4 回答 4

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,commandreader变量将被关闭并相应地处置。

于 2010-05-17T15:35:11.380 回答
3

您必须关闭阅读器而不是关闭连接。看看这里:http: //msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close.aspx

于 2010-05-17T15:36:08.773 回答
0

如果您既不关闭数据读取器也不关闭连接,垃圾收集器将为您完成。另一方面,这可能会影响您的应用程序的性能。

于 2010-05-17T15:35:59.553 回答
0

我不确定,但我总是使用 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(); }
    }
}
于 2010-05-17T20:48:29.240 回答