使用 MS Access 的 C# 参数化 OLEDB 查询

标签 c# database parameters oledb

好的,我确实有一个 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: Data type mismatch in criteria expression. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

我的访问数据库文件中列的数据类型是从 1stNum 到 6thNum 的 Numeric 和 datedraw 中的 Date/Time,当然 ID 是 AutoNumber

参数化查询实现有没有错误?请帮助我。

更新

  • 我将 nums 的 OleDBType 更改为 Numeric,因为在 Access 文件中它的 Numeric

最佳答案

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

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

注意 OleDb 可以使用命名参数:参见 MS Access, Named parameters and Column Names

关于使用 MS Access 的 C# 参数化 OLEDB 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139950/

相关文章:

c# - 神秘号码18888888888888888

c# - 如何通过组合其他两个列表来创建新列表?

c# - 在共享主机中在 IIS/WCF 下触发线程/进程的最佳方法

mysql - 如何实现2到n个关系表

javascript - 我可以通过 Javascript 向表单添加参数吗?

javascript - 从 angularjs 中的 Controller 中删除路由参数?

C# 6.0 多个相同的空条件运算符检查与单个传统检查

database - 允许用户通过其他网络登录

javascript - uuid 未保存在 mongodb 中

python - 使用 Symfit for Python 进行 ODE 拟合 : How to get estimations for intial values?