2016-08-19 11 views
0

VB.NetのDataGridViewからSQL Serverテーブルを更新する際に問題があります。例外はNull値ではなく、I値が有効な値に設定されていることを確信している、ここでのコードは次のとおりです。パラメータ化されたクエリでは、値がnullでないところで提供されなかったパラメータが必要です

cmd.CommandText = _ 
    "update BillItem set [email protected],[email protected],[email protected],[email protected],[email protected] where [email protected]" 
cmd.Parameters.Add("@item1", SqlDbType.NVarChar) 
cmd.Parameters.Add("@q1", SqlDbType.Int) 
cmd.Parameters.Add("@price1", SqlDbType.Float) 
cmd.Parameters.Add("@tp1", SqlDbType.Float) 
cmd.Parameters.Add("@billId1", SqlDbType.Int) 
cmd.Parameters.Add("@Id1", SqlDbType.Int) 

connection.Open() 
cmd.Connection = connection 

For i As Integer = 0 To 1 
    cmd.Parameters(0).Value = DataGridView1.Rows(i).Cells(1).Value 
    cmd.Parameters(1).Value = DataGridView1.Rows(i).Cells(2).Value 
    cmd.Parameters(2).Value = DataGridView1.Rows(i).Cells(3).Value 
    cmd.Parameters(3).Value = Integer.Parse(DataGridView1.Rows(i).Cells(2).Value) * Double.Parse(DataGridView1.Rows(i).Cells(3).Value) 
    cmd.Parameters(4).Value = Integer.Parse(CurrentBillIDLbl.Text) 
    cmd.Parameters(5).Value = DataGridView1.Rows(i).Cells(0).Value 
    cmd.ExecuteNonQuery() 
Next 
connection.Close() 

ここでは例外です:

タイプの未処理の例外「System.Data.SqlClientの.SqlException 'System.Data.dllで発生しました
追加情報: (@item nvarchar(4)、@ quantity int、@ price float、@ tp float、@ billId 'は、パラメータ' @ q1 'を要求します。

+0

なぜすべての数値を解析していませんか?これが理由かもしれません。 –

+0

DGVとDB操作を一般的に使用することは、それよりはるかに簡単であることを意図しています。特に、右の行からビットごとにデータを釣り上げることに関してです。私はコードがそのエラーメッセージと一致しているとは確信していません – Plutonix

+0

@ OlivierJacot-Descombes、私は有効な値を入力していると確信していますが、私は構文解析を試みますが、それは問題を解決しませんでした – Ateeq

答えて

3

CommandTextパラメータは、エラーメッセージに表示されている実際のパラメータと一致しません。実際のクエリは@itemだと考えていますが、あなたの例は@item1です。同様に、@q1@quantityではありません。 あなたが表示したコードが文脈の中にあるとは思わない、あなたが思っているコマンドテキストを使用していない。

+1

見つかりました! CommandTextは以前から別のクエリに使用されていました。この問題は新しいCommandTextを使用して解決されました – Ateeq

+1

さらに、グローバルDBオブジェクト – Plutonix

関連する問題