C# 使用MS Access的参数化OLEDB查询
好的,我有一个OLEDB函数,可以在数据库中插入数据。我知道使用OLEDB执行SQL的常用方法,但我想在这里做的是对查询字符串中的每个数据进行参数化 现在我在谷歌工作了将近3个小时,只知道如何在OLEDB中进行参数化查询,但他们都没有和我一起工作 现在,在下面的代码中,我的查询似乎运行良好,但仍然出现了一个错误 我的功能代码:C# 使用MS Access的参数化OLEDB查询,c#,database,parameters,oledb,C#,Database,Parameters,Oledb,好的,我有一个OLEDB函数,可以在数据库中插入数据。我知道使用OLEDB执行SQL的常用方法,但我想在这里做的是对查询字符串中的每个数据进行参数化 现在我在谷歌工作了将近3个小时,只知道如何在OLEDB中进行参数化查询,但他们都没有和我一起工作 现在,在下面的代码中,我的查询似乎运行良好,但仍然出现了一个错误 我的功能代码: private bool dbInsert(int [] inputNumbers, DateTime datetime){ try {
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;
}
这是控制台中显示的错误日志:
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.OLEDBEException:标准中的数据类型不匹配
表情。在
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult
hr)在
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS
数据库参数、对象和执行器结果)位于
System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象&
执行结果)在
System.Data.OleDb.OleDbCommand.ExecuteCommand(命令行为
行为、对象和执行器结果)
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior
行为,字符串方法)在
System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
在我的access db文件中,我的列的数据类型是从1stNum到6thNum的数值型和datedraw中的日期/时间型,当然ID是自动编号
参数化查询实现中是否有错误?请帮帮我
更新
- 我将nums的OleDBType更改为Numeric,就像访问文件itsNumeric
String sql =
"INSERT INTO 655(1stNum, 2ndNum, 3rdNum, 4thNum, 5thNum, 6thNum, datedraw)
VALUES('?', '?', '?', '?', '?', '?' ,'?')";
另外,您是否尝试过插入一个实整数而不是
“?”
?我要检查的是类型:OleDbType.DBTimeStamp
如果我记得的话,TimeStamp是一种特殊类型,它不容易与DateTime类型兼容
请注意,OleDb可以使用命名参数:请参见datedraw参数如何?它的datetimeok我试着直接把数字放在它工作的查询中。。但是为什么呢?oledbtype是否有任何错误?这是因为您正在将值设置为整数,但传入了问号,而问号不是整数。很抱歉,我没有抓住要点,我希望在查询中将我的数字作为参数传递。我已经试着从一开始就删除引用语了。。仍然不工作:(表示
DBDateTime
的格式必须是yyymmddhhmmss
。看起来您没有对其进行格式化。可能是这个问题?@cadrel让我检查一下,谢谢仍然是相同的错误:(你能把查询简化为一个参数吗?@cadrell0谢谢你,用正确的格式设置日期是有效的。我是通过直接把数字放在查询中发现的。但是我想把这些数字参数化。。