C#使用odbcDataReader:从“。”更改小数分隔符。以十进制值表示“,”

时间:2017-11-23 14:28:00

标签: c# database-connection decimalformat

当我尝试将odbcDataReader中的值赋给'Decimal'变量时,它会删除小数分隔符“,”。值本身在我从中检索数据的数据库中以十进制形式存储。我试过像这样使用CultureInfo:

   CultureInfo myCI = new CultureInfo("en-US", false);
   myCI.NumberFormat.NumberDecimalSeparator = ",";
   OdbcDataReader Reader = null;
   OdbcCommand cmd = new OdbcCommand("...");
   cmd.Connection = cn;
   Reader = cmd.ExecuteReader();
          if (Reader.HasRows)
                {
                    while (Reader.Read())
                    {
                        *(decimal variable)* p = Convert.ToDecimal(Reader["Decimal Value"], myCI);
                    }
                }

如果有意义,我位于欧盟,我们的默认小数分隔符是“,”但我必须连接到另一个使用“。”的数据库。作为十进制分隔符所以我不能将默认的十进制设置更改为“,”,我只需要将此值用作“,”作为十进制分隔符。我觉得我的问题在于CultureInfo,但找不到明确的解决方案。

希望这是有道理的,谢谢。

2 个答案:

答案 0 :(得分:0)

你可以尝试一下;

while (Reader.Read())
{
*(decimal variable)* p = Convert.ToDecimal(Reader["Decimal Value"], myCI);
}

while (Reader.Read())
{
    decimal p = 0;

    decimal.TryParse(Reader["ColumnName"].ToString().Replace('.',','), out p);
}

OR

while (Reader.Read())
{
    double p = double.Parse(Reader["ColumnName"].ToString(), CultureInfo.InvariantCulture);
}

答案 1 :(得分:0)

Decimal变量对我来说是错误的选择,我已将其更改为double,代码p = Reader.GetDouble(Reader.GetOrdinal("Value"));正如我预期的那样工作。

感谢您提供的信息。