我有一个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中运行。
感谢。
答案 0 :(得分:1)
问题是您现在拥有的验证规则不允许您的应用程序获得价值。
您需要的验证规则是:
Like "%[A-Z]" Or Like "*[A-Z]"
规则“%[A-Z]”将允许来自应用程序的A到Z之间的字符
和
规则“* [A-Z]”允许来自Access