Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL在MS Access中执行良好,但在C“when”中执行不好;“验证规则”;设定_C#_Sql_Database_Ms Access_Ms Access 2000 - Fatal编程技术网

C# SQL在MS Access中执行良好,但在C“when”中执行不好;“验证规则”;设定

C# SQL在MS Access中执行良好,但在C“when”中执行不好;“验证规则”;设定,c#,sql,database,ms-access,ms-access-2000,C#,Sql,Database,Ms Access,Ms Access 2000,我有一个奇怪的问题。我在MS Access中编写了一个查询,当从MS Access运行时,它会在数据库中完美地插入一个值,但当从C#执行相同的查询时,它会显示“验证文本”,因为OLEDBEException和insert命令失败。“验证规则”是“@.*”该列保存电子邮件,电子邮件后面应该有一个“@”和一个点“.”。删除“验证规则”并从C#执行查询时没有问题。仅当设置了验证规则且仅从C#而不是从MS Access查询执行中发生错误时,才会发生此错误 我已将代码和数据库上载到: MS Access中

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

我已将代码和数据库上载到:

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);
    }
数据库快照:


你说得对,我可以证实你的行为

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

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

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

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

你说得对,我可以证实你的行为

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

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

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

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