到目前为止,我总是使用类似的结构从DB获取数据并填充DataTable
public static DataTable GetByID(int testID)
{
DataTable table = new DataTable();
string query = @"SELECT * FROM tbl_Test AS T WHERE T.testID = @testID";
using (SqlConnection cn = new SqlConnection(Configuration.DefaultConnectionString))
{
SqlCommand cmd = new SqlCommand(query, cn);
cmd.Parameters.Add("@testID", SqlDbType.Int).Value = testID;
cn.Open();
table.Load(cmd.ExecuteReader());
}
return table;
}
Run Code Online (Sandbox Code Playgroud)
现在我在构建分析中看到了一些警告:
TestService.cs(37):CA2000:Microsoft.Reliability:在方法'TestService.GetByID(int)'中,对象'table'不沿所有异常路径放置.在对对象'table'的所有引用都超出范围之前,调用System.IDisposable.Dispose.
TestService.cs(42):CA2000:Microsoft.Reliability:在方法'TestService.GetByID(int)'中,在对对象'cmd'的所有引用都超出范围之前,调用对象'cmd'上的System.IDisposable.Dispose.
我应该更改我的代码吗?
public static DataTable GetByID(int testID)
{
DataTable table = new DataTable();
string query = @"SELECT * FROM tbl_Test AS T WHERE T.testID = @testID";
using (SqlConnection cn = new SqlConnection(Configuration.DefaultConnectionString))
{
using (SqlCommand cmd = new SqlCommand(query, cn))
{
cmd.Parameters.Add("@testID", SqlDbType.Int).Value = testID;
cn.Open();
table.Load(cmd.ExecuteReader());
}
}
return table;
}
Run Code Online (Sandbox Code Playgroud)
如何处理DataTable对象?在使用中放置SqlCommand是一个好习惯吗?
谢谢
干杯
你也应该这样做:
using (SqlDataReader reader =
cmd.ExecuteReader
(CommandBehavior.CloseConnection))
{
table.Load(reader);
}
Run Code Online (Sandbox Code Playgroud)
加载表时