插入数据时的异常处理

时间:2012-09-25 08:39:39

标签: c# sql-server exception-handling

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

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

5 个答案:

答案 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 documentationSqlCommand.ExecuteNonQuery抛出InvalidCastExceptionSqlExceptionIOExceptionInvalidOperationExceptionObjectDisposedException

顺便问一下,这是什么?

catch (Exception)
{
    throw;
}

答案 4 :(得分:0)

如果你打开像ExecuteNonQuery这样的方法范围(在大多数情况下你会看到它可以抛出的例外列表,所以如果你想捕获特定的异常。

比你可以用的更多。 :catch(System.InvalidCastException异常)以捕获此特定异常