使用Microsoft Access数据库引擎评估Visual c#中的访问计算字段时,数据类型不匹配

时间:2015-11-10 12:43:34

标签: c# visual-studio oledb

我在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();

提前感谢您的帮助。

2 个答案:

答案 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);                    
}