Я использую ODP.NET для доступа к БД Oracle из C # .NET.
Пожалуйста, смотрите следующий код:
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 округляется?
Я посмотрел в БД и там хранится округленное значение.
С другой стороны, я использовал Oracle SQL Developer для изменения этого значения, и я могу сохранить 0.8414709848078965 в базе данных?
Я пробовал типы NUMBER, FLOAT (126), BINARY_DOUBLE ... всегда одинаковый результат.
Почему возникает проблема с использованием ODP.NET?