[英]Cleaning Up Resources via Using Statement & Dispose for DataTable, SqlConnection, SqlCommand, & SqlDataAdapter
我必须调用存储过程并获取结果。 我知道这样做的方式多种多样(与所有编程一样),我应该通过调用Dispose()
和/或Close()
来清理资源。 阅读这个关闭或处理问题,我认为我应该使用using
语句,这样就足够了。 以下是我拨打电话的方式。 我的问题是-我是否会使这个问题复杂化,这会清理所有资源吗?
private Int32 CallStoredProcedure(Int32 Id)
{
using (var dt = new DataTable())
{
using (var conn = new SqlConnection(ConnectionString))
{
using (var sqlCmd = new SqlCommand("SEL_StoredProcedure", conn))
{
using (var sda = new SqlDataAdapter(sqlCmd))
{
sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@ID", Id);
sqlCmd.Connection.Open();
sda.Fill(dt);
}
}
}
if (dt.Rows.Count == 1)
return Convert.ToInt32(dt.Rows[0]["IDv2"]);
else if (dt.Rows.Count > 1)
throw new Exception("Multiple records were found with supplied ID; ID = " + studentId.ToString());
}
return 0;
}
PS-我知道我可以调用ExecuteScalar
,但这不是我在这里要查找的,因为我将对非标量调用使用通用格式。
AFAIK您不需要在使用块中包装DataTable或SqlDataAdapter,因为它们不实现IDisposable。
您可以像这样将“使用”语句“链接”在一起:
using(var conn = new SqlConnection(connectionString))
using(var cmd = new SqlCommand("SEL_storedProcedure", conn))
{
}
您编写的代码似乎确实可以正确处理所有对象。
您应该知道的是,处理DataTable会使该对象不可用,这通常不是DataTable的意图。 通常,如果要填充数据表,则打算将数据保留(缓存)一段时间,而不是在查询方法中将其丢弃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.