我经常写这样的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
{
Console.WriteLine("No rows found.");
}
reader.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
Gre*_*reg 18
是.using
调用Dispose.在SqlDataReader上调用Dispose会关闭它.
这是从Reflector收集的SqlDataReader的伪代码:
public void Dispose()
{
this.Close();
}
public override void Close()
{
if( !IsClosed )
CloseInternal(true);
}
private void CloseInternal(bool closeReader)
{
try
{
// Do some stuff to close the reader itself
}
catch(Exception ex)
{
this.Connection.Abort();
throw;
}
if( this.Connection != null && CommandBehavior.CloseConnection == true )
{
this.Connection.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14165 次 |
最近记录: |