输入字符串的格式不正确。十进制类型的预期类型

时间:2016-10-18 14:57:55

标签: c# mysql asp.net oracle datatable

我没有在VOUCHER_NO列中插入任何值并进行更新。

但它给我的错误是

  

输入字符串的格式不正确。不能存储<>在VOUCHER_NO专栏中。预期类型为十进制。

以下是我的代码

drpayinfo[0]["VOUCHER_NO"] = e.Record["VOUCHER_NO"];

更新

我正在使用Oracle DB,其数据类型为NUMBER (10)

2 个答案:

答案 0 :(得分:1)

您的e.Record["VOUCHER_NO"]似乎有一些不可转换为十进制的不需要的内容。在分配或转换之前尝试这种方式检查

if(e.Record["VOUCHER_NO"] != "")
{
  drpayinfo[0]["VOUCHER_NO"] = Convert.ToDecimal(e.Record["VOUCHER_NO"]);
}

但更安全的检测和忽略不良内容的方法是

decimal result;

if (Decimal.TryParse(e.Record["VOUCHER_NO"], out result))
{
    drpayinfo[0]["VOUCHER_NO"] = result;
}
else
{
    // do stuff if failed to parese
}

答案 1 :(得分:1)

根据您对其他答案的评论,您的值为空字符串。这不能直接转换为小数。你必须决定采取一些行动。

他们下面的代码会尝试转换它,如果没有则会采取行动。 TryParse是您转换的朋友!

decimal num = 0;

if (!Decimal.TryParse(e.Record["VOUCHER_NO"], out num))
{
    //Throw some error, maybe set num to some default and assign...
    //The appropriate action in this situation depends on your needs.
}
else
{
    //You can safely assign the value
    drpayinfo[0]["VOUCHER_NO"] = num;
}