以编程方式将行插入 MS Access DB 时出错 (C#)

Error inserting row into MS Access DB programmatically (C#)

我有一个 Microsoft Access 数据库(*.mdb 文件),我需要以编程方式(在 C# 中)将行插入其中。我无法控制此访问文件 - 它是我需要使用的预先存在的文件。

当我尝试使用下面的代码执行此操作时,抛出 System.Data.OleDb.OleDbException。该异常中的消息包含已定义为其中一个字段(客户)的验证文本的相同文本。所以从表面上看,异常消息表明我没有提供必填字段,或者我为该字段提供了无效值。

但是,我传递的值应该是 Ok。当然,在 Access 本身中插入具有相同值的行可以正常工作。

我使用的代码是:

using (var connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\Indial_Reg.mdb;"))
{
    connection.Open();
    using (var cmd = new OleDbCommand("INSERT INTO [Indial Register] ([Exchange],[Customer]) Values ('WISB/SYRA','TEST')", connection))
    {
        try
        {
            cmd.ExecuteNonQuery();
        }
        catch (OleDbException e)
        {
        }
    }
}

有趣的是,当我打开 Microsoft Access 并在访问脚本编辑器中发出完全相同的 INSERT INTO 命令时,插入工作完美无缺。

如果相关,在客户字段上定义的验证规则是: 喜欢“[A-Z]

我是否使用了错误的连接字符串?错误的提供商驱动程序? 谁能指出我在代码中做错了什么? 我束手无策。任何帮助都会很棒。

我的环境是:Windows7 32位。我安装了 MS Access 2007。 我的代码是 运行 Visual Studio 2012.

谢谢。

问题是您现在拥有的验证规则不允许您的应用程序的值。

您需要的验证规则是:

Like "%[A-Z]" Or Like "*[A-Z]"

规则“%[A-Z]”将允许来自应用程序的 A 到 Z 之间的字符

规则“*[A-Z]”允许从 Access