C# SQL连接代码
这是我的SQL连接代码。不确定我是否处理了所有错误。我应该使用Try Catch block而不是使用吗C# SQL连接代码,c#,.net,sql-server-2008,C#,.net,Sql Server 2008,这是我的SQL连接代码。不确定我是否处理了所有错误。我应该使用Try Catch block而不是使用吗 使用(SqlConnection con=newsqlconnection(GetSQLConnectionString())) { string cmdStr=“插入表1…”; 使用(SqlCommand cmd=newsqlcommand(cmdStr,con)) { //将带有值的参数存储到集合中 cmd.Parameters.AddWithValue(“NAME”,NAME); cm
使用(SqlConnection con=newsqlconnection(GetSQLConnectionString()))
{
string cmdStr=“插入表1…”;
使用(SqlCommand cmd=newsqlcommand(cmdStr,con))
{
//将带有值的参数存储到集合中
cmd.Parameters.AddWithValue(“NAME”,NAME);
cmd.Parameters.AddWithValue(“ID”,ID);
尝试
{
con.Open();
cmd.ExecuteNonQuery();
}
捕获(例外情况除外)
{
lblError.Text=ex.ToString();
}
如果(con!=null)
con.Close();
}
}
try/catch块是个好主意,因为using
不会捕获任何错误,它只会抛出异常并停止
此外,在使用代码的中,您不需要执行以下操作:
if (con != null)
con.Close();
由于这将由using
语句处理。try/catch
块是一个好主意,因为using
不会捕获任何错误,它只会抛出异常并停止
此外,在使用代码的中,您不需要执行以下操作:
if (con != null)
con.Close();
因为这将由使用
语句来处理。从数据访问到lblError的catch
阻塞告诉我您的UI代码和DB代码太近了。我不会那样做;我的DB代码简单地说:
using (var con = SomeUtilityCode.GetOpenConnection())
{
string cmdStr = "INSERT INTO table1.....";
using (SqlCommand cmd = new SqlCommand(cmdStr, con))
{
//Store parameters with values to the collection
cmd.Parameters.AddWithValue("NAME", name);
cmd.Parameters.AddWithValue("ID",id);
cmd.ExecuteNonQuery();
}
}
或者使用“整洁”更干净的东西:
我的UI代码是
try
{
someObject.SomeSensibleMethod(NAME, ID);
}
catch (Exception ex)
{
ShowError(ex);
}
其中,ShowError
告诉用户问题(可能已清除),而不需要evert操作来了解UI详细信息。从数据访问对话到lblError的catch
阻塞告诉我您的UI代码和DB代码太近了。我不会那样做;我的DB代码简单地说:
using (var con = SomeUtilityCode.GetOpenConnection())
{
string cmdStr = "INSERT INTO table1.....";
using (SqlCommand cmd = new SqlCommand(cmdStr, con))
{
//Store parameters with values to the collection
cmd.Parameters.AddWithValue("NAME", name);
cmd.Parameters.AddWithValue("ID",id);
cmd.ExecuteNonQuery();
}
}
或者使用“整洁”更干净的东西:
我的UI代码是
try
{
someObject.SomeSensibleMethod(NAME, ID);
}
catch (Exception ex)
{
ShowError(ex);
}
其中,ShowError
告诉用户有关问题(可能已清除),而不需要evert操作来了解UI详细信息。我将重新编写当前的catch块以仅捕获-捕获任何异常
很少是正确的。这还意味着您可以生成更漂亮的输出(格式化每个单独的SQLError对象),包括总错误计数,或者对您知道代码可以处理的特定错误作出反应
异常处理的一般规则是只捕获代码在该点可以正确处理的异常(因此通常避免捕获异常
)。您通常会在应用程序中安装一个顶级“未处理的异常”处理程序,该处理程序将记录其他异常并关闭应用程序。如果您不知道异常是什么,您怎么能相信代码在发生异常时可以继续成功运行
正如Neil所说,您不需要显式地关闭连接,因为使用
块也可以保证这一点。我将重新编写您当前的catch块以仅捕获-捕获任何异常
很少是正确的。这还意味着您可以生成更漂亮的输出(格式化每个单独的SQLError对象),包括总错误计数,或者对您知道代码可以处理的特定错误作出反应
异常处理的一般规则是只捕获代码在该点可以正确处理的异常(因此通常避免捕获异常
)。您通常会在应用程序中安装一个顶级“未处理的异常”处理程序,该处理程序将记录其他异常并关闭应用程序。如果您不知道异常是什么,您怎么能相信代码在发生异常时可以继续成功运行
正如尼尔所说,您不需要显式关闭连接,因为使用块也可以保证这一点。6个问题-不接受-您需要接受您过去一些问题的答案-否则人们会更不愿意帮助您。6个问题-不接受-您需要接受您过去一些问题的答案-否则人们就不会愿意帮助你了;这在这里是有意义的,因为这个方法已经被破坏了;这在这里才有意义,因为该方法已经断开。