好吧我确实有一个OLEDB函数可以在数据库中插入数据。我知道如何使用OLEDB进行SQL的常用方法,但我想要做的是参数化查询字符串中的每个数据。
现在我已经在Google工作了近3个小时,只知道如何在OLEDB中进行参数化查询,但所有这些都不适合我。
现在最后我的查询似乎在下面的代码中正常工作但仍然发生错误
我的功能代码:
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)at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object& executeResult)at System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象&安培; executeResult)at System.Data.OleDb.OleDbCommand.ExecuteCommand(的CommandBehavior 行为,对象& executeResult)at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(的CommandBehavior 行为,String方法)at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
我的访问数据库文件中我的列的数据类型是数字,从1stNum到6thNum,而日期/时间在datedraw中,当然ID是自动编号
参数化查询实现中有任何错误吗?请帮帮我。
更新
答案 0 :(得分:2)
我要检查的一件事是类型:OleDbType.DBTimeStamp
如果我记得,TimeStamp是一种特殊类型,它不容易与DateTime类型兼容。
请注意,OleDb CAN使用命名参数:请参阅MS Access, Named parameters and Column Names
答案 1 :(得分:1)
您需要围绕值的单引号,如下所示:
String sql =
"INSERT INTO 655(1stNum, 2ndNum, 3rdNum, 4thNum, 5thNum, 6thNum, datedraw)
VALUES('?', '?', '?', '?', '?', '?' ,'?')";
另外,您是否尝试过插入实数而不是"?"
?