2017-10-02 5 views
0

データベースから行を削除しようとしています。行をクリックしてから「削除ボタン」を押すと、より多くの必須パラメータ "、私はエラーを何もしない、私は自分のテーブル名をチェックし、それは正しいです。私の他の削除ボタンが行を削除するときに1つまたは複数の必須パラメータの値がありません

DialogResult result = MessageBox.Show("Are you sure you want to delete this user?", 
      "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
     if (result == DialogResult.Yes) 
     { 
      string sql = string.Format(@"DELETE FROM User_list WHERE ID ={0}", 
       dataGridView2.CurrentRow.Cells[0].Value.ToString()); 
      crudTools.ExecuteQuery(sql); 
      crudTools.FillDataGrid("SELECT * FROM User_list", ref dataGridView2);} 
+0

あなたはそれのexecuteQuery行にブレークポイントを置いた場合、SQL変数の値は何ですか? –

答えて

0

正常に動作し、問題がstring.Format内でこのクエリ文字列に由来ようだ:

string sql = string.Format(@"DELETE FROM User_list WHERE ID ={0}", dataGridView2.CurrentRow.Cells[0].Value.ToString()); 

一つ以上の必要なパラメータ用ませ与えられた値がWHERE句でその渡された値を示していませんが有効でない場合IDが文字列の場合は{0}とマークされた最初のパラメータを一重引用符で囲むだけです。dataGridView2.CurrentRow.Cells[0].Value.ToString()は文字列を返しますが、一重引用符は含みません数値としてアクセスすることによって治療することでしょう。

string sql = string.Format(@"DELETE FROM User_list WHERE ID = '{0}'", dataGridView2.CurrentRow.Cells[0].Value.ToString()); 

それともIDを渡す前intに変換し、整数列である場合:

string sql = string.Format(@"DELETE FROM User_list WHERE ID = {0}", Convert.ToInt32(dataGridView2.CurrentRow.Cells[0].Value.ToString())); 

NB:値が来る場合、パラメータ化クエリを使用することを忘れないでくださいユーザ入力からDataGridViewの内部

同様の問題:

No value given for one or more required parameters. error during Search

+0

私はすでにあなたの両方のコードを試しましたが、 string sql = string.Format(@ "User_list WHERE ID = '{0}'"、dataGridView2.CurrentRow.Cells [0] .Value.ToString())から削除します。 とConvert.ToInt32コード ですが、結果は同じ – Janelle

+0

どのような値が 'dataGridView2.CurrentRow.Cells [0] .Value'によって返されましたか?エラーは、WHERE句に1つの引数がないことを示しています。コード内で破損する可能性のあるクエリはその行だけです。実行フローが 'crudTools.ExecuteQuery(sql)'で破損していることを確認してください。 –

関連する問題