我使用C#从MS Access中检索数据。当我尝试设置一个"收集"数字,一切都很好,但是当我处理字符串时,一切都变得疯狂。
基本上,我有一个模拟周期表的数据库。我有像物质状态,密度,原子序数等的列。
让我们说我想获得原子序数大于20的所有元素。我的查询如下:
"Select * From Periodic Where (AtomicNumber > 20)"
这给了我我想要的东西。但是,我想要所有原子序数大于20且目前处于气态的元素。所以我尝试了类似的东西:
"Select * From Periodic Where (AtomicNumber > 20 AND StateOfMatter = Gas)"
失败。它引发了一个错误说明:
没有给出一个或多个必需参数的值。
我了解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();
}
}
问题在哪里,我该如何解决?为什么匹配字符串比数字难得多?
答案 0 :(得分:3)
如果您的StateOfMatter
是输入的字符,则需要将其值与单引号一起使用,如<; p>
StateOfMatter = 'Gas'
` character(grave accent)不等于' character(apostrophe)。
由于OleDbCommand
没有关注关于参数名称,因此它认为您的Gas
是一个参数,这就是它所说的原因;
一个或更多必需参数没有给出值。
因为它知道如果这不是一个参数,它应该用单引号括起来。