C# 使用MS Access的参数化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 {

好的,我有一个OLEDB函数,可以在数据库中插入数据。我知道使用OLEDB执行SQL的常用方法,但我想在这里做的是对查询字符串中的每个数据进行参数化

现在我在谷歌工作了将近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;
            }
这是控制台中显示的错误日志:

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谢谢你,用正确的格式设置日期是有效的。我是通过直接把数字放在查询中发现的。但是我想把这些数字参数化。。