我使用存储过程插入数据,我想处理异常我该怎么办?我可以获得什么样的异常以及如何抛出它们?
public int insert(string fname,string lname,string city)
{
SqlConnection con = new SqlConnection(cstr);
try
{
SqlCommand cmd = new SqlCommand("insert", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@firstname", TextBox1.Text);
cmd.Parameters.AddWithValue("@lastname", TextBox2.Text);
cmd.Parameters.AddWithValue("@city", TextBox3.Text);
con.Open();
return cmd.ExecuteNonQuery();
}
catch (Exception)
{
throw;
}
finally
{
con.Close();
}
}
答案 0 :(得分:1)
最好是捕获特定的异常,而不是基础Exception
。如果稍后处理,您可以捕获SqlException然后抛出相同的内容。同时使用using statement和您的连接,它将作为try / finally块使用。
答案 1 :(得分:1)
SqlException
应该在上层处理。如果你不是让它自然抛出并在需要时记录异常。
在这里,只需使用using
关键字作为最佳做法。
using (var con = new SqlConnection(cstr))
{
SqlCommand cmd = new SqlCommand("insert", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@firstname", TextBox1.Text);
cmd.Parameters.AddWithValue("@lastname", TextBox2.Text);
cmd.Parameters.AddWithValue("@city", TextBox3.Text);
con.Open();
return cmd.ExecuteNonQuery();
}
答案 2 :(得分:1)
如果您想了解ExecuteNonQuery函数抛出的异常信息,您只需要查看MSDN页面。
http://msdn.microsoft.com/en-gb/library/system.data.sqlclient.sqlcommand.executenonquery.aspx
就像Habib说的那样,而不是
catch(Exception)
您应该根据您的具体情况捕获特定的异常类型:
catch(SqlException sqlEx)
并且在catch中,执行抛出SqlException时必须执行的操作。
答案 3 :(得分:0)
According to the documentation,SqlCommand.ExecuteNonQuery
抛出InvalidCastException
,SqlException
,IOException
,InvalidOperationException
和ObjectDisposedException
。
顺便问一下,这是什么?
catch (Exception)
{
throw;
}
答案 4 :(得分:0)
如果你打开像ExecuteNonQuery这样的方法范围(在大多数情况下你会看到它可以抛出的例外列表,所以如果你想捕获特定的异常。
比你可以用的更多。 :catch(System.InvalidCastException异常)以捕获此特定异常