-1

我正在使用存储过程插入数据,我想处理异常我该怎么做?我可以获得什么样的异常以及如何抛出它们?

 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();
      }
  }
4

5 回答 5

1

最好是捕获特定的 Exception,而不是 base Exception。如果稍后要处理它,您可能会捕获SqlException然后抛出相同的异常。还可以将using 语句 与您的连接一起使用,该语句将用作 try/finally 块。

于 2012-09-25T08:41:59.530 回答
1

如果您想了解 ExecuteNonQuery 函数抛出的异常信息,您只需查看 MSDN 页面。

http://msdn.microsoft.com/en-gb/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

就像哈比布说的那样做,而不是

catch(Exception)

您应该根据您的情况捕获特定的异常类型:

catch(SqlException sqlEx)

并且在捕获中,当抛出 SqlException 时做任何你必须做的事情。

于 2012-09-25T08:47:51.610 回答
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();
  }
于 2012-09-25T08:46:12.920 回答
0

如果您打开 ExecuteNonQuery( 之类的方法范围,您将看到它在大多数情况下可能会抛出的异常列表,因此如果您想捕获特定的异常。

比你可以用于前。:catch(System.InvalidCastException exception) 来捕捉这个特定的异常

于 2012-09-25T08:52:14.430 回答
0

根据文档SqlCommand.ExecuteNonQuery抛出InvalidCastExceptionSqlExceptionIOExceptionInvalidOperationExceptionObjectDisposedException.

顺便问一下,这是怎么回事?

catch (Exception)
{
    throw;
}
于 2012-09-25T08:48:15.597 回答