如何关闭asp.net中的sqlconnection

时间:2010-05-17 15:27:55

标签: asp.net vb.net sqlconnection

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

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

如果我避免调用“MyDataReader.Close()”,那么连接是否会关闭? 我问这个是因为我假设如果调用“MyConn.Close”它会自动关闭相关的datareader ......或者我错了?

由于

4 个答案:

答案 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声明:

  

定义一个范围,在该范围之外将放置一个或多个对象。

因此,您可以放心,在退出使用块时,您的connectioncommandreader变量将会被关闭并进行相应处理。

答案 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(); }
    }
}