1

我有一个奇怪的问题。我在 MS Access 中编写了一个查询,当从 MS Access 运行时,它会在数据库中完美地插入一个值,但是当从 C# 执行相同的查询时,它会将“验证文本”显示为 OleDbException 并且插入命令失败。“验证规则”是“ @ .*” 该列保存的电子邮件应该有一个“@”和一个点“。” 在它之后。删除“验证规则”并从 C# 执行查询时没有问题。它仅在设置了验证规则并且仅从 C# 而不是从 MS Access 查询执行中发生错误时发生。

我已将代码和数据库上传到:http ://www.2shared.com/file/XYmFD8Mg/Database_Validation.html

MS Access 中的 SQL 查询:

INSERT INTO EMail ( EMail, Company )
VALUES ('bbb@qwerty.com', 'Company');

代码是:

    try
    {
        string dbPath = null;

        if (File.Exists(Path.GetFullPath(@"..\..\..\Database.accdb")))
            dbPath = Path.GetFullPath(@"..\..\..\Database.accdb");

        dbConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbPath);
        dbConnection.Open();

        if (0 >= new System.Data.OleDb.OleDbCommand("INSERT INTO EMail ( EMail, Company ) VALUES ('bbb@qwerty.com', 'Company')", dbConnection).ExecuteNonQuery())
            MessageBox.Show("Could not insert 'bbb@qwerty.com'. Check if already inserted.");

        try { dbConnection.Close(); }
        catch (Exception) { }
    }
    catch (Exception Ex)
    {
        try { dbConnection.Close(); }
        catch (Exception) { }

        MessageBox.Show(Ex.Message);
    }

数据库快照:

在此处输入图像描述

4

1 回答 1

4

你是对的,我可以确认行为。

我做了一些测试,显然,如果您将验证规则更改为

Like "%@%.%"

它在 C# 中有效,但在 Access 中不再有效。我猜原因是 Access 使用 DAO 进行数据访问,它*用作通配符,而 OLEDB 的通配符是%.

我发现以下验证规则在 Access 和 .NET 中都产生了所需的结果:

Like "*@*.*" Or Like "%@%.%"
于 2013-06-20T14:05:54.657 回答