我正在使用SqlConnection,SqlDataAdapter和SqlCommand。
我只是想知道以下代码是否正确,如果可能的话,更好的方法是什么。
private void FillWithData(int id)
{
try
{
LoadTable1(id);
}
catch(Exception ex){throw ex}
}
private void LoadTable1(SqlConnection conn, int id)
{
try
{
using (conn = new SqlConnection(sConnectionString))
using (SqlDataAdapter table1DA = new SqlDataAdapter ())
{
DataTable tblTable1 = Table1;
SqlCommand table1CMD = getSelectTable1(conn, id);
table1DA.SelectCommand = table1CMD;
table1DA.Fill(tblTable1);
table1CMD.Dispose();
}
}
catch(SqlException ex)
{
if (conn.State == ConnectionState.Open) conn.Close();
conn.Dispose();
throw ex;
}
finally
{
try
{
if (conn.State == ConnectionState.Open) conn.Close();
}
catch (Exception){}
conn.Dispose();
}
}
我还有更多方法可以为其他表做同样的事情。目前,所有内容都在一个方法下执行,该方法具有try/catch
块,其中定义了每个表的SqlDataAdapter
和SqlCommands
。我的目标是将不同表的逻辑分成不同的方法
答案 0 :(得分:2)
我看到了一些可能的改进:
catch (Exception){}
) - 要么处理它,要么让它冒泡。using
块将为您执行此操作SqlCommand
放在using
区块中。throw ex;
不是最佳做法,因为您丢失了原始堆栈跟踪 - 最好只改为throw;
。由于除了关闭连接(这是不必要的)之外,您不会在catch块中执行任何操作,因此可以完全删除catch块。进行这些更改只会让您:
private void FillWithData(int id)
{
LoadTable1(id);
}
private void LoadTable1(int id)
{
using (SqlConnection conn = new SqlConnection(sConnectionString))
using (SqlDataAdapter table1DA = new SqlDataAdapter ())
using (SqlCommand table1CMD = getSelectTable1(conn, id))
{
DataTable tblTable1 = Table1;
table1DA.SelectCommand = table1CMD;
table1DA.Fill(tblTable1);
}
}
由于SqlDataAdapter
有一个带SQlCommand
的构造函数,你可以这样做:
private void LoadTable1(int id)
{
using (SqlConnection conn = new SqlConnection(sConnectionString))
using (SqlCommand table1CMD = getSelectTable1(conn, id))
using (SqlDataAdapter table1DA = new SqlDataAdapter (table1CMD))
{
table1DA.Fill(Table1);
}
}