1

好的,我确实有一个在数据库中插入数据的 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;
            }

这是控制台中显示的错误日志:

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()

我的访问数据库文件中我的列的数据类型是从 1stNum 到 6thNum的数字和 datedraw 中的日期/时间,当然 ID 是AutoNumber

参数化查询实现中是否有任何错误?请帮我。

更新

  • 我在 Access 文件中将 nums 的OleDBType更改为Numeric
4

2 回答 2

2

我要检查的一件事是类型:OleDbType.DBTimeStamp

如果我记得,TimeStamp 是一种特殊的类型,它不容易与 DateTime 类型兼容。

请注意,OleDb 可以使用命名参数:请参阅MS 访问、命名参数和列名

于 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 回答