2016-10-01 7 views
0

.Netに新規です。私はちょうどそれを学び始めた。エラーとして「SqlExceptionがユーザーコードによって処理されなかった」と表示されました。SqlExceptionがcmd.ExecuteNonQuery()のユーザーコードによって処理されていません。

protected void Button1_Click(object sender, EventArgs e) 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandText = "insert tbemp (@eno, @ename, @es, @eadd)"; 
    cmd.Connection = con; 
    cmd.Parameters.Add("@eno",SqlDbType.Int).Value = Convert.ToInt32(TextBox1.Text); 
    cmd.Parameters.Add("@ename", SqlDbType.VarChar,50).Value = TextBox2.Text; 
    cmd.Parameters.Add("@es", SqlDbType.VarChar, 50).Value = TextBox3.Text; 
    cmd.Parameters.Add("@eadd", SqlDbType.VarChar, 50).Value = TextBox4.Text; 
    cmd.ExecuteNonQuery(); 
    cmd.Dispose(); 
    TextBox1.Text = String.Empty; 
    TextBox2.Text = String.Empty; 
    TextBox3.Text = String.Empty; 
    TextBox4.Text = String.Empty; 
    TextBox1.Focus(); 
} 
+5

https://www.tutorialspoint.com/sql/sql-insert-query.htm SQLには構造、構文、キーワードがあります。 – Plutonix

+2

[ask]を読んでください。例外には、クエリに何が間違っているかを示す非常に有用なメッセージがあります。そのメッセージを使って、あなたは解決策を見つけることができるように、調査を行うことができます。 – CodeCaster

答えて

0

挿入DMLが正しくありません。それはinsert into tbemp values(@eno, @ename, @es, @eadd)でなければなりません。

また、50文字のサイズ制限とTextBox値の直接割り当てには非常に注意が必要です。それは別の例外要因かもしれません。

0

cmd.CommandTextに設定するSQLクエリは有効なSQLではありません。私はこのようなものだろう

insert into tbemp values (@eno, @ename, @es, @eadd) 
+0

1つのテーブルに値を入力する場合は、を使用せずに値を追加できます。また、私も試みましたが、運はありませんでした:( – Rahul

+0

あなたのテーブルには4つ以上のカラムがありますか?この場合、明示的に挿入するカラムを指定する必要があります: 'insert into tbemp(column1、column2 (@eno、@name、@es、@eadd) ' –

+0

ちょうどfyi、INTOはT-SQLでは省略できません。INSERT INTOを正しく使用すると便利な例がいくつかありますさらに:https://technet.microsoft.com/en-us/library/dd776381%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396 –

0

tbempは、あなたのテーブル名で、クエリは次のようになりますと仮定すると、例外が発生した場合には

using (SqlCommand cmd = new SqlCommand()) 
    { 
     try 
     { 
     cmd.CommandText = 
     "INSERT tbemp VALUES (@eno, @ename, @es, @eadd)"; 
     cmd.Connection = con; 
     cmd.Parameters.Add("@eno", SqlDbType.Int).Value = 
      Convert.ToInt32(TextBox1.Text); 
     cmd.Parameters.Add("@ename", SqlDbType.VarChar, 50) 
      .Value = TextBox2.Text; 
     cmd.Parameters.Add("@es", SqlDbType.VarChar, 50).Value = 
      TextBox3.Text; 
     cmd.Parameters.Add("@eadd", SqlDbType.VarChar, 50).Value = 
      TextBox4.Text; 
       cmd.ExecuteNonQuery(); 

     TextBox1.Text = String.Empty; 
     TextBox2.Text = String.Empty; 
     TextBox3.Text = String.Empty; 
     TextBox4.Text = String.Empty; 
     TextBox1.Focus(); 
     } 
     catch (SqlException exception) 
     { 

      System.Diagnostics.Debug.WriteLine(exception.Message); 
      throw; 
     } 
     catch (Exception exception) 
     { 
      System.Diagnostics.Debug.WriteLine 
      ("General Exception caught: " + exception.Message); 
      throw; 
     } 

を、あなたのSqlCommandオブジェクトは、それを置くことによって配置されることになりますa usingステートメント今あなたはまたあなたが受け取っているエラーから診断プリントを得るでしょう。また、例外(リトライなどで問題を修正しようとするようなこと)を何もしていないので、例外をスローしたいので、メソッドを呼び出すコードは何かが間違っていることを知ります。例外を再実行するときには、throw exceptionを実行する必要はありません。スタックトレースをリセットするためです。ちょうどthrowを使用してください。

関連する問題