SqlDataReader 关闭和 SqlConnection
SqlDataReader Close and SqlConnection
在这种情况下,连接会发生什么情况?我不知道 reader.Close() 是否关闭了打开的 sqlconnection。
private static void ReadOrderData(string connectionString)
{
string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));
}
// Call Close when done reading.
reader.Close();
}
}
if(connection.State == ConnectionState.Open)
{
connection.Close();
}
connection.Open();
既然你在做
using (SqlConnection connection =
new SqlConnection(connectionString))
{
这将确保连接被释放,因为它从 IDisposable 继承,尽管有异常。一旦对象退出相应的范围,对象就会被释放。
更好地使用
using(SqlCommand command = new SqlCommand(queryString, connection))
和
using(SqlDataReader reader = command.ExecuteReader())
出于与上述相同的原因。
reader.Close() 不会关闭 SqlConnection,但由于您有一个 using 语句,一旦您退出 using 块,连接将无论如何都会关闭。
关闭 reader 不会改变连接状态。如果你确实想这样做,你可以将 CommandBehavior.CloseConnection
传递给 SqlCommand
实例的 ExecuteReader
方法。
SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
建议您在所有一次性类型周围放置一个 using
方块,例如您的 SqlDataReader
实例。
using(SqlDataReader reader = command.ExecuteReader()) {
// rest of code
}
另请参阅 CommandBehavior 了解更多选项。
在这种情况下,连接会发生什么情况?我不知道 reader.Close() 是否关闭了打开的 sqlconnection。
private static void ReadOrderData(string connectionString)
{
string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));
}
// Call Close when done reading.
reader.Close();
}
}
if(connection.State == ConnectionState.Open)
{
connection.Close();
}
connection.Open();
既然你在做
using (SqlConnection connection =
new SqlConnection(connectionString))
{
这将确保连接被释放,因为它从 IDisposable 继承,尽管有异常。一旦对象退出相应的范围,对象就会被释放。
更好地使用
using(SqlCommand command = new SqlCommand(queryString, connection))
和
using(SqlDataReader reader = command.ExecuteReader())
出于与上述相同的原因。
reader.Close() 不会关闭 SqlConnection,但由于您有一个 using 语句,一旦您退出 using 块,连接将无论如何都会关闭。
关闭 reader 不会改变连接状态。如果你确实想这样做,你可以将 CommandBehavior.CloseConnection
传递给 SqlCommand
实例的 ExecuteReader
方法。
SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
建议您在所有一次性类型周围放置一个 using
方块,例如您的 SqlDataReader
实例。
using(SqlDataReader reader = command.ExecuteReader()) {
// rest of code
}
另请参阅 CommandBehavior 了解更多选项。