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

时间:2015-03-18 01:17:51

标签: c# database ms-access visual-studio-2012

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

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

然而,我传入的价值应该是好的。当然,在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命令时,插入工作完美无瑕。

如果相关,则在Customer字段中定义的验证规则为: 喜欢" [A-Z] "

我使用错误的连接字符串吗?错误的提供商驱动程序? 任何人都可以指出我在代码中做错了吗? 我的智慧结束了。任何帮助都会很棒。

我的环境是:Windows 7 32位。我安装了MS Access 2007。 我的代码在Visual Studio 2012中运行。

感谢。

1 个答案:

答案 0 :(得分:1)

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

您需要的验证规则是:

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

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

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