【问题标题】:SQL executes well in MS Access but not in C# when "Validation Rule" is set设置“验证规则”时,SQL 在 MS Access 中执行良好,但在 C# 中不执行
【发布时间】:2013-06-17 07:38:42
【问题描述】:

我遇到了一个奇怪的问题。我在 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);
    }

数据库快照:

【问题讨论】:

    标签: c# sql database ms-access ms-access-2000


    【解决方案1】:

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

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

    Like "%@%.%"
    

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

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

    Like "*@*.*" Or Like "%@%.%"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多