【发布时间】:2011-04-15 19:06:47
【问题描述】:
我正在使用 ODP.NET 从 C# .NET 访问 Oracle DB。 请看以下代码:
OracleConnection con = new OracleConnection();
con.ConnectionString = "User Id=user;Password=pass;Data Source=localhost/orcl";
con.Open();
/* create table */
DbCommand command = con.CreateCommand();
command.CommandType = CommandType.Text;
try
{
command.CommandText = "DROP TABLE TEST";
command.ExecuteNonQuery();
}
catch
{
}
//command.CommandText = "CREATE TABLE TEST (VALUE BINARY_DOUBLE)";
command.CommandText = "CREATE TABLE TEST (VALUE FLOAT(126))";
command.ExecuteNonQuery();
/* now insert something */
double val = 0.8414709848078965;
command.CommandText = "INSERT INTO TEST VALUES (" + val.ToString(System.Globalization.CultureInfo.InvariantCulture) + ")";
command.ExecuteNonQuery();
/* and now read inserted value */
command.CommandText = "SELECT * FROM TEST";
DbDataReader reader = command.ExecuteReader();
reader.Read();
double res = (double) (decimal)reader[0];
Console.WriteLine("Inserted " + val + " selected " + res);
由此产生的输出始终是: 插入 0,841470984807897 选择 0,841470984807897
但是在调试器下查看变量值 val == 0.8414709848078965 res == 0,841470984807897
为什么 res 被四舍五入?
我查看了 DB 并存储了四舍五入的值。
另一方面,我使用 Oracle SQL Developer 修改了这个值,我可以在数据库中存储 0.8414709848078965 吗?
我尝试了类型 NUMBER、FLOAT(126)、BINARY_DOUBLE... 总是相同的结果。
为什么使用 ODP.NET 会出现问题?
【问题讨论】:
标签: oracle types double sqldatatypes