2012-04-20 17 views
0

私はgridviews行を使用しています。更新するために、編集したフィールドをテーブルに追加するために更新しています。以下に示すように、1つの値を除いてすべてが機能しているように見えます。insert文のSQLエラー

For i As Integer = 0 To colnum 

     If e.OldValues(i).ToString() <> e.NewValues(i).ToString() Then 
      Dim uid As Integer = Convert.ToInt32(strUID) 

      Dim UpC As OleDbCommand = New OleDbCommand("INSERT INTO tblAud (TN, FN, tID, OldValue, UserID) VALUES ('" + tN + "', '" + fn + "'," + tID + ", '"+ oldValue + "'," + uid + ")", con) 

      UpC.ExecuteNonQuery() 

     End If 
    Next 

テキストボックスにユーザーIDを表示すると、IDの代わりにSQLに数値を入力すると、idが正しく表示されます。また、私はuseridを取る場合はSQLが動作しますが、私はエラー "入力文字列が正しい形式ではありませんでした。 また、すべてがデータベースに2回追加されます。それは何故でしょうか?

答えて

1

SQL挿入文字列を別の変数に作成します。その後、ウォッチウィンドウでそれを見ると、何が起きているのかを見ることができます。

のような何か...

Dim SQl as String = 'INSERT INTO tblAud (TN, FN, tID, OldValue, UserID) VALUES ('" + tN + "', '" + fn + "'," + tID + ", '"+ oldValue + "'," + uid + ")"' 
+0

私はちょうどまったく同じことを言っていました。いいアドバイス! IMHO ... – paulsm4

+0

それは何の違いもありませんでしたか?私は、ウォッチウィンドウや任意のデバッグ、サーバーとデータベースの場所について何かを使用することはできません.. – user1162628

0

入力文字列が正しい形式ではありませんでした。

一般的に変換に関連付けられています。文字列を数値に変換するので、それが最も可能性の高い原因です。 Int32.TryParseのようなメソッドを試して番号を検証し、解析できない場合はエラーメッセージを表示することができます。空の文字列またはnullにあるConvert.ToInt32がこのエラーメッセージを生成することにも注意してください。

INSERTクエリで実際にe.OldValues(i)を使用していないため、すべてoldValueという名前の他の変数がデータベースに2回追加されている可能性があります。より多くのコードサンプルがなくても言うのは難しいですが、デバッグツールを学び、何が起こっているのかを見ることが最善の方法です。

+0

TryParseは、同じエラーが発生します。 Convert.ToInt32を使ってテキストボックスに値を表示すると数値が表示されるので、空ではないことが分かります。変数oldValueに関しては、e.OldValues(i)からの文字列として作成しましたが、コードを追加するために投稿を編集します。 – user1162628

0

IDをテキストボックスに追加してから、SQL文でTextbox.textを使用しています。