わかりました、データベースにデータを挿入する 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に変更します