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