使用 odbcDataReader 的 C#:从“.”更改小数点分隔符以“,”为十进制值
C# using odbcDataReader: Change decimal seperator from "." to "," in Decimal value
当我尝试将 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 中,但找不到明确的解决方案。
希望这是有道理的,谢谢。
你可以试试;
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);
}
或
while (Reader.Read())
{
double p = double.Parse(Reader["ColumnName"].ToString(), CultureInfo.InvariantCulture);
}
Decimal 变量是我的错误选择,我已将其更改为 double 并且代码 p = Reader.GetDouble(Reader.GetOrdinal("Value"));
可以按我预期的方式工作。
感谢您提供信息。
当我尝试将 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 中,但找不到明确的解决方案。
希望这是有道理的,谢谢。
你可以试试;
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);
}
或
while (Reader.Read())
{
double p = double.Parse(Reader["ColumnName"].ToString(), CultureInfo.InvariantCulture);
}
Decimal 变量是我的错误选择,我已将其更改为 double 并且代码 p = Reader.GetDouble(Reader.GetOrdinal("Value"));
可以按我预期的方式工作。
感谢您提供信息。