我在这里使用遗留代码,并且有许多实例SqlDataReader从未关闭或处置.连接已关闭,但我不确定是否有必要手动管理阅读器.
这会导致性能下降吗?
我经常写这样的DataReader代码:
try
{
dr = cmd.ExecuteReader(CommandBehavior.SingleResult);
while (dr.Read())
{
// Do stuff
}
}
finally
{
if (dr != null) { dr.Close(); }
}
Run Code Online (Sandbox Code Playgroud)
它是安全的替代try,并finally只用using各地块DataReader的创作?我想知道的原因是因为在所有微软的例子中我都看到他们使用了一个用于连接的但是总是明确地调用Close()它DataReader.
Heres是使用DataReader检索数据的一个例子 (ADO.NET):
static void HasRows(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM Categories;",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
}
else …Run Code Online (Sandbox Code Playgroud) 我看到在大多数样本中,SqlCommand都是这样使用的
using (SqlConnection con = new SqlConnection(CNN_STRING))
{
using (SqlCommand cmd = new SqlCommand("Select ID,Name From Person", con))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道为什么我们使用"使用"声明.但是SqlCommand没有包含Close()方法,所以我们应该在using语句中使用它