1

わかりました、データベースにデータを挿入する OLEDB 関数があります。OLEDB で SQL を実行する通常の方法は知っていますが、ここでやりたいことは、クエリ文字列内の各データをパラメーター化することです。

今、私は OLEDB でパラメータ化されたクエリを作成する方法を知っているだけで、ほぼ 3 時間 Google にいますが、それらのすべてが私と連携していません。

ついに私のクエリは以下のコードで正常に動作するように見えますが、それでもエラーが発生します

私の機能コード:

private bool dbInsert(int [] inputNumbers, DateTime datetime){
                try {
                    String sql = "INSERT INTO 655(1stNum, 2ndNum, 3rdNum, 4thNum, 5thNum, 6thNum, datedraw) VALUES(?, ?, ?, ?, ?, ? ,?)";
                    OleDbCommand dbcmd = new OleDbCommand(sql, app.oleDbConn());
                    dbcmd.Connection.Open();
                    dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[0];
                    dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[1];
                    dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[2];
                    dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[3];
                    dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[4];
                    dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[5];
                    dbcmd.Parameters.Add("?",OleDbType.DBTimeStamp).Value = datetime;
                    dbcmd.ExecuteNonQuery();
                    dbcmd.Connection.Close();

                }catch(OleDbException ex){
                    showPrompt("Error reading the database",Color.Red);
                    Console.WriteLine(ex.ToString());
                }
                return true;
            }

これは、コンソールに表示されるエラー ログです。

System.Data.OleDb.OleDbException: 条件式のデータ型が一致しません。System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr) で System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams、Object& executeResult) で System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) で System.Data. System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 動作、文字列メソッド) の OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 動作、Object& executeResult) System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

Access db ファイルの列のデータ型は1stNum から 6thNum までのNumericで、datedraw のDate/Timeです。もちろん ID は AutoNumber です

パラメータ化クエリの実装に間違いはありますか? 私を助けてください。

アップデート

  • AccessファイルのNumericと同様に NumのOleDBTypeをNumericに変更します
4

2 に答える 2

2

私がチェックすることの1つは、タイプです:OleDbType.DBTimeStamp

思い出すと、TimeStamp は、DateTime 型と簡単に互換性がない特殊な型です。

OleDb は名前付きパラメーターを使用できることに注意してください。MS Access、名前付きパラメーター、および列名を参照してください。

于 2013-12-28T07:09:44.843 に答える
1

次のように、値を一重引用符で囲む必要があります。

String sql = 
    "INSERT INTO 655(1stNum, 2ndNum, 3rdNum, 4thNum, 5thNum, 6thNum, datedraw)
    VALUES('?', '?', '?', '?', '?', '?' ,'?')";  

また、代わりに実数の整数を挿入してみました"?"か?

于 2012-10-30T13:27:36.383 に答える