Он не конвертирует ваши реалы (плавающие точки IEEE) в научный формат: вот так отображает их в SSMS. Вот как ADO.Net отображает типы данных между SQL Server и миром .Net: http://msdn.microsoft.com/en-us/library/cc716729.aspx
Для типов с плавающей запятой SQL Server реализует тип данных ISO float(
n )
, где n - размер мантиссы в битах (1-53 включительно). ). real
является синонимом float(24)
; float
является синонимом float(53)
.
Скорее, чем вы могли бы ожидать, столбцы с плавающей запятой с мантиссой размером 1-24 бита отображаются в / из System.Single
; в то время как те, у кого мантисса размером более 24 бит, отображаются на System.Double
.
Типы данных
Sql Server money
и smallmoney
действительно мало связаны с деньгами. Это просто десятичные числа с фиксированной точностью, с точностью до 4 десятичных знаков (1/10000 единицы). Ado.Net сопоставляет money
и smallmoney
с System.Decimal
и сопоставляет System.Decimal
с money
(нет сопоставления с smallmoney
). Это преобразование страдает от некоторого несоответствия импеданса, однако System.Decimal
является десятичным форматом с плавающей запятой. Преобразование в / из типа данных money
SQL Server может привести к
- Потеря точности. Если значение
System.Decimal
имеет более 4 цифр справа от десятичной точки, дополнительные цифры теряются.
- Повышение точности. Если значение `System.Decimal имеет меньше 4 цифр справа от десятичной запятой, при преобразовании в деньги оно приобретает точность в виде дополнительных цифр (триал нули) справа от десятичной точки. Эта дополнительная точность сохраняется при чтении с SQL Server.