【问题标题】:OleDB Could Not Determine the Decimal ValueOleDB 无法确定十进制值
【发布时间】:2016-12-14 09:13:17
【问题描述】:

我正在尝试从 FoxPro 获取一张表到 C#。我正在使用以下语句;

sqlCmd.CommandText = @"SELECT ew.ew_pplid, ew.ew_name, ew.ew_from, ew_to, ew.ew_totdays
                       FROM empwork ew
                       INNER JOIN employs emp ON ew.ew_pplid = emp.em_pplid
                       WHERE emp.em_netname NOT LIKE '' 
                       AND TRIM(emp.em_netname) <> '' 
                       AND emp.em_type <> 2
                       AND ew.ew_from > ?";
sqlCmd.Parameters.AddWithValue("pDate", Convert.ToDateTime("01/08/2016"));

但我遇到了一个我从未见过的错误;

The Provider could not determine the Decimal value. For example, the row was just created, the default for the Decimal column was not available, and the consumer had not yet set a new Decimal value.

以前有没有人看到过这个错误,如果有,我该如何解决这个问题?

【问题讨论】:

  • 顺便说一句,在查询中使用 TRIM() 和 LIKE 意味着它不太可能进行 Rushmore 优化,并且对于大型数据集可能会很慢。

标签: c# mysql wpf oledb foxpro


【解决方案1】:

如果在日期时间因错误消息而窒息,您可以尝试通过稍作更改

 AND ew.ew_from > CTOD( ? )";

而参数只是日期的字符串

sqlCmd.Parameters.AddWithValue("pDate", "01/08/2016");

VFP 的命令 CTOD() 表示 Character-To-Date,并且由于您已经处于预期的月/日/年格式,应该通过。

如果失败实际上是在另一个字段上,例如“ew.ew_totdays”,您总是可以从更新查询开始,将返回的字段限制为仅返回一个 ID 键,不理会 where 子句。然后,如果它通过,一次添加一个字段。您可能在数据的某处有一个 NULL 值。

如果所有字段都正常,那么您可能必须根据 WHERE 子句应用查询并一次剥离一部分条件,直到所有字段都被应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多