0

C#.NETとSQL Server 2012でデータベースアプリケーションを開発中です。 一部のSQL文が正しく動作していません。コードを実行すると、エラーは発生しません。しかし、私が何かを削除しようとしたり、レコードを更新しようとすると、私はそれをしません。コードは次のとおりです。SQLクエリコマンドが機能していませんがエラーが発生しませんSQL Server

public void updateFinalTable() 
    { 
     DialogResult result = MessageBox.Show("Please make sure no fields are empty or they will get changed. \n\t\t Do you want to continue?", 
     "Important Note", 
     MessageBoxButtons.YesNo); 
     if (result == DialogResult.Yes) 
     { 
      try 
      { 
       SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ConnectionString); 

       con.Open(); 
       SqlCommand cmd = new SqlCommand("UPDATE fianlTable SET AccountNumber='" + textBox1.Text + "', Date='" + dateTimePicker1.Value.ToString("MM/dd/yyyy") + "', CustomerName='" + textBox3.Text + "' , Debit='" + txtDebit.Text + "', Credit='" + txtCredit.Text + "', Balance='" + txtBalance.Text + "' WHERE Id LIKE '" + textBox4.Text + "' ", con); 
       cmd.ExecuteNonQuery(); 
       this.fianlTableBindingSource.AddNew(); 
       DataTable dt = new DataTable(); 
       SqlDataAdapter sda = new SqlDataAdapter("select * from fianlTable WHERE (UserName LIKE '" + LoginSession.UserID + "')", con); 

       sda.Fill(dt); 
       dataGridView1.DataSource = dt; 
       refresh(); 
       con.Close(); 

       MessageBox.Show("Record Updated Successfully!"); 

      catch (Exception) 
      { 
       MessageBox.Show("Record Could Not be updated...! "); 
      } 
     } 
    } 

削除操作の場合も同様です。どちらのコードもエラーは発生しませんが、データベース内に変更はありません。

+0

おそらく、クエリが正常に動作していません。これは、クエリに間違ったIdが原因で発生している可能性がありますか?私は助けができないが、queyの最後の空白に気づくことはできない: 'textBox4.Text +" '"' - それを削除しようとしましたか? – Andersnk

+5

[SQLインジェクションアラート](http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - SQLステートメントを連結しない** ** **パラメータ化されたクエリ**代わりにSQLインジェクションを避けるため –

+0

WHEREによってクエリがレコードに影響しないためです。アプリケーションをデバッグし、構築されたT-SQLを抽出してからサーバーに渡します。 SSMSでSQLを手動で実行して、レコードに影響しないことを証明し、コードで生成されたSQLでエラーを表示します。とにかくパラメータ化されたprocs、IMOを使うべきです。 –

答えて

1

=の代わりにLikeを使用しました。潜在的にSQLインジェクションにつながる

SqlCommand cmd = new SqlCommand("UPDATE fianlTable SET AccountNumber='" + textBox1.Text + "', Date='" + 
dateTimePicker1.Value.ToString("MM/dd/yyyy") + "', CustomerName='" + 
textBox3.Text + "' , Debit='" + txtDebit.Text + "', Credit='" + 
txtCredit.Text + "', Balance='" + txtBalance.Text + 
"' WHERE Id = '" + textBox4.Text + "' ", con); 

ATTENTIONこのタイプのクエリ - だからあなたのコードは次のようにする必要があります。

string qry = = "UPDATE fianlTable SET AccountNumber = @accnt, CustomerName = @cname Where ID = @id)"; 

SqlCommand cmd = new SqlCommand(qry, con); 
cmd.Parameters.AddWithValue("@accnt", textBox1.Text); 
cmd.Parameters.AddWithValue("@cname", textBox3.Text); 
cmd.Parameters.AddWithValue("@id", textBox4.Text); 
cmd.ExecuteNonQuery(); 
+0

[あなたは既にAddWithValue()を使用して停止できますか?](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithueue-already/)をチェックしてください。 '.AddWithValue()'の使用を止めてください - 予期しない驚くべき結果につながるかもしれません... –

関連する問題