Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MSSQL.DataReader vs bigint / 3 сообщений из 3, страница 1 из 1
13.06.2018, 22:48
    #39660532
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL.DataReader vs bigint
Конвертнул тут себе для удобства отладки кусочек Оракловой базы в MSSQL, чтобы в одной виртуалке со студией жила (VS2010SP1).
Проект .NET 4.0.

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
Mar 29 2009 10:27:29
Copyright (c) 1988-2008 Microsoft Corporation
Express Edition with Advanced Services on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)

Выясняется, что любой запрос типа
Код: sql
1.
select a,b,xy where a=


приводит к исключению в DataReader.Read
Arithmetic overflow error converting nvarchar to data type numeric.
В случае если xy имеет тип bigint или numeric (m,n) при m >18

При этом, я еще не обращаюсь к полю XY - вылетает еще на .Read()
В некоторых (большинстве) случаев я могу обойтись без больших нумериков, но не всегда.
ODP.NET же отрабатывает корректно

Как это понимать ?
Это пофиксили где либо позже ?
...
Рейтинг: 0 / 0
14.06.2018, 00:46
    #39660558
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL.DataReader vs bigint
Siemargl,

могу проверить на SQL Server 2008 (SP3), но нужен конкретный скрипт создания таблицы и запроса для repro
...
Рейтинг: 0 / 0
14.06.2018, 11:54
    #39660689
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL.DataReader vs bigint
LRSiemargl,

могу проверить на SQL Server 2008 (SP3), но нужен конкретный скрипт создания таблицы и запроса для repro
Спс за идею. Начал делать воспроизводимый пример, нашел причину ошибки.

Используется MS Enterprise Library, и она при упрощенном создании параметра запроса Decimal внутри себя проставляет Precision и Scale = 0
Код: c#
1.
dbase.AddInParameter(cmd, "id", DbType.Decimal, 5675);



Но как то хитро параметр создается, что исключение про Precision/Scale, как при создании ручками, не выбрасывается.
А при выполнении запроса - переполняется конвертация параметра. Хотя значение параметра в диапазоне 1-50.
Скорее Datareader.Read() поле СУБД пытается привести к тому же типу Decimal(0,0).

А при перекачке БД через Import/Export Data тип поля сменился с decimal на nvarchar (а иногда на bigint) - в обоих случаях конверсия типа к типу параметра проваливается.
Но это только с MSSQL провайдером, а с Оракловым - отрабатывает - возможно срабатывает корректный тип поля.

Короче, сменил тип на DbType.Int32 и все стало ОК.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MSSQL.DataReader vs bigint / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]