-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後で処理する場合は、 SqlExceptionをキャッチして、同じものをスローできます。また 、try/finallyブロックとして機能する接続でusingステートメントを使用します。

于 2012-09-25T08:41:59.530 に答える
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 に答える
1

ExecuteNonQuery 関数がスローする例外の情報が必要な場合は、MSDN ページを調べるだけで済みます。

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

代わりに、Habibの言うとおりにしてください

catch(Exception)

状況に応じて、特定の例外タイプをキャッチする必要があります。

catch(SqlException sqlEx)

キャッチでは、SqlException がスローされたときに必要なことをすべて実行します。

于 2012-09-25T08:47:51.610 に答える
0

ドキュメントによると、、、、および をSqlCommand.ExecuteNonQueryスローします。InvalidCastExceptionSqlExceptionIOExceptionInvalidOperationExceptionObjectDisposedException

ところで、これは何ですか?

catch (Exception)
{
    throw;
}
于 2012-09-25T08:48:15.597 に答える
0

ExecuteNonQuery( のようなメソッド スコープを開くと、List of Exceptions が表示され、ほとんどの状況でスローされる可能性があるため、特定の例外をキャッチしたい場合。

exに使用できるよりも。: catch(System.InvalidCastException exception) この特定の例外をキャッチします

于 2012-09-25T08:52:14.430 に答える