在这种情况下,连接会发生什么?我不知道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();
}
}
答案 0 :(得分:3)
reader.Close()不会关闭SqlConnection,但由于你有一个 using 语句,一旦退出using块,连接就会被关闭。
答案 1 :(得分:1)
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())
出于同样的原因。
答案 2 :(得分:1)
关闭阅读器不会改变连接状态。如果您确实想这样做,可以将CommandBehavior.CloseConnection
传递给ExecuteReader
实例的SqlCommand
方法。
SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
建议您在using
个实例的所有可支配类型周围放置一个SqlDataReader
块。
using(SqlDataReader reader = command.ExecuteReader()) {
// rest of code
}
有关更多选项,另请参阅CommandBehavior。