我在Visual Studios c#windows窗体项目中有一个OleDbCommand,我试图选择我的Access Table Stock中每个项目的名称,其中该表中计算字段的值小于1。 Access中计算字段的结果类型设置为十进制,代码看起来好像应该有效,但无论出于什么原因它都没有。你能帮帮我吗?
这是我的代码:
loginForm.connection.Open();
stockLowString = "";
var checkStockLowCommand = new OleDbCommand("SELECT stockName FROM Stock WHERE (stockLowCalculation < '" + Convert.ToDecimal(1) + "')",loginForm.connection);
OleDbDataReader checkStockLowReader = checkStockLowCommand.ExecuteReader();
while (checkStockLowReader.Read())
{
stockLowString = stockLowString + checkStockLowReader.GetString(0) + " ";
}
if (stockLowString != "")
{
MessageBox.Show("There are some Stock Items that are low, these are" + Environment.NewLine + stockLowString);
}
loginForm.connection.Close();
错误发生在
行上OleDbDataReader checkStockLowReader = checkStockLowCommand.ExecuteReader();
提前感谢您的帮助。
答案 0 :(得分:0)
解决问题,或者至少避免。我只是将计算放在Command中而不是使用计算字段。 这个问题仍然有效,因为我没有解决它。
答案 1 :(得分:0)
打开数据库并检查“stockLowCalculation”字段的类型,它很可能不是十进制的。我建议你重新编写查询并使其参数化。这样您就可以避免大多数可能的数据类型不匹配错误。
string conS ="..."; // connection string
var param = 1;
using (var connection = new OleDbConnection(conS))
{
string queryString = "SELECT stockName FROM Stock WHERE stockLowCalculation < @var"
var cmd = new OleDbCommand(queryString, connection);
cmd.Parameters.Add(new OleDbParameter("@var", param));
connection.Open();
OleDbDataAdapter adapt = new OleDbDataAdapter(cmd);
}