为什么我无法使用 SQL 和 Access 匹配字符串?
Why I can't match a string using SQL and Access?
我正在使用 C# 从 MS Access 检索数据。当我尝试设置 "collects" 个数字的查询时,一切正常,但当我处理字符串时,一切都变得疯狂。
基本上,我有一个模拟周期性 table 的数据库。我有物质状态、密度、原子序数等列。
假设我想获取所有原子序数大于 20 的元素。我的查询如下:
"Select * From Periodic Where (AtomicNumber > 20)"
这正是我想要的。但是假设我想要所有原子序数大于 20 且当前处于气态的元素。所以我尝试了类似的东西:
"Select * From Periodic Where (AtomicNumber > 20 AND StateOfMatter = Gas)"
失败。它抛出一个错误说明:
No value given for one or more required parameters.
我知道 this question。我已经尝试了一切,包括所有这些查询:
"Select * From Periodic Where (AtomicNumber > 20 AND StateOfMatter = `Gas`)"
"Select * From Periodic Where (AtomicNumber > 20 AND StateOfMatter LIKE `Gas`)"
"Select * From Periodic Where (AtomicNumber > 20 AND StateOfMatter = `%Gas%`)"
一切都给我上面的错误。我已经尝试解决这个问题两天了,但没有成功。
这是我创建连接的 C# 代码:
private void ConnectToDataBase(string Query)
{
OleDbConnection DBConnection = new OleDbConnection();
OleDbDataAdapter DataAdapter;
DataTable LocalDataTable = new DataTable();
try
{
DBConnection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\user\Documents\PeriodicTable.accdb;
Persist Security Info=False";
DBConnection.Open();
DataAdapter = new OleDbDataAdapter(Query, DBConnection);
// The error occurs here.
DataAdapter.Fill(LocalDataTable);
if (Elements.Count == 0)
{
return;
}
}
catch (OleDbException ex)
{
throw new Exception("Error : " + ex.Message);
}
finally
{
DBConnection.Close();
}
}
问题出在哪里,如何解决?为什么匹配字符串比匹配数字难得多?
如果您的 StateOfMatter
是键入的字符,则需要使用它的值和单引号,例如;
StateOfMatter = 'Gas'
` character (grave accent) is not equal to ' character (apostrophe).
并且由于 OleDbCommand
不 关心 参数名称,它认为您的 Gas
是一个参数,这就是它说的原因;
No value given for one or more required parameters.
因为它知道如果这不是参数,应该用单引号括起来。
我正在使用 C# 从 MS Access 检索数据。当我尝试设置 "collects" 个数字的查询时,一切正常,但当我处理字符串时,一切都变得疯狂。
基本上,我有一个模拟周期性 table 的数据库。我有物质状态、密度、原子序数等列。
假设我想获取所有原子序数大于 20 的元素。我的查询如下:
"Select * From Periodic Where (AtomicNumber > 20)"
这正是我想要的。但是假设我想要所有原子序数大于 20 且当前处于气态的元素。所以我尝试了类似的东西:
"Select * From Periodic Where (AtomicNumber > 20 AND StateOfMatter = Gas)"
失败。它抛出一个错误说明:
No value given for one or more required parameters.
我知道 this question。我已经尝试了一切,包括所有这些查询:
"Select * From Periodic Where (AtomicNumber > 20 AND StateOfMatter = `Gas`)"
"Select * From Periodic Where (AtomicNumber > 20 AND StateOfMatter LIKE `Gas`)"
"Select * From Periodic Where (AtomicNumber > 20 AND StateOfMatter = `%Gas%`)"
一切都给我上面的错误。我已经尝试解决这个问题两天了,但没有成功。
这是我创建连接的 C# 代码:
private void ConnectToDataBase(string Query)
{
OleDbConnection DBConnection = new OleDbConnection();
OleDbDataAdapter DataAdapter;
DataTable LocalDataTable = new DataTable();
try
{
DBConnection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\user\Documents\PeriodicTable.accdb;
Persist Security Info=False";
DBConnection.Open();
DataAdapter = new OleDbDataAdapter(Query, DBConnection);
// The error occurs here.
DataAdapter.Fill(LocalDataTable);
if (Elements.Count == 0)
{
return;
}
}
catch (OleDbException ex)
{
throw new Exception("Error : " + ex.Message);
}
finally
{
DBConnection.Close();
}
}
问题出在哪里,如何解决?为什么匹配字符串比匹配数字难得多?
如果您的 StateOfMatter
是键入的字符,则需要使用它的值和单引号,例如;
StateOfMatter = 'Gas'
` character (grave accent) is not equal to ' character (apostrophe).
并且由于 OleDbCommand
不 关心 参数名称,它认为您的 Gas
是一个参数,这就是它说的原因;
No value given for one or more required parameters.
因为它知道如果这不是参数,应该用单引号括起来。