Мы разрабатываем отдельное приложение, которое хранит свои данные в базе данных. Мы используем набор данных и TableAdapters для связи с базой данных. Одним из основных требований является приложение, чтобы иметь возможность использовать SQL Server, Oracle и MySQL. Для этого мы сделали запросы к поставщику ТП независимыми. Мы используем ODBC провайдера.
Отлично работает для SQL Server и MySQL, но с Oracle у нас были проблемы. Одной из проблем, которую мы не можем преодолеть, является ошибка приведения десятичного числа к Int64.
Таблицы Oracle используют NUMBER (38) для системных идентификаторов (полей автоинкремента), которые, как кажется, отображаются в десятичном виде. Однако мы используем Int64 / long в DataSet / TA, поскольку SQL Server и MySQL используют BIGINT. (Обратите внимание, что DataSEt TableAdapters, где автоматически генерируются из схемы SQL Server в начале.)
Мы получаем исключение приведения при получении значения NUMBER от Oracle, поскольку оно возвращает десятичный объект.
DbCommand getIDcmd = connection.CreateCommand();
getIDcmd.CommandText = "select LAST_ID from SEQUENCE_ID";
sequenceID = (Int64)getIDcmd.ExecuteScalar(); // we get a cast exception here returns decimal
обратите внимание, что мы попытались снизить точность в Oracle (например, NUMBER (10)), как мы видели в других записях на форуме, но безуспешно.
Это проблема ODBC? Если мы перейдем к другому провайдеру, то решим проблему?