SQL Server Data Type Mappings

 

SQL Server and the .NET Framework are based on different type systems. For example, the .NET Framework Decimal structure has a maximum scale of 28, whereas the SQL Server decimal and numeric data types have a maximum scale of 38. To maintain data integrity when reading and writing data, the SqlDataReader exposes SQL Server–specific typed accessor methods that return objects of System.Data.SqlTypes as well as accessor methods that return .NET Framework types. Both SQL Server types and .NET Framework types are also represented by enumerations in the DbType and SqlDbType classes, which you can use when specifying SqlParameter data types.

The following table shows the inferred .NET Framework type, the DbType and SqlDbType enumerations, and the accessor methods for the SqlDataReader.

SQL Server Database Engine type.NET Framework typeSqlDbType enumerationSqlDataReader SqlTypes typed accessorDbType enumerationSqlDataReader DbType typed accessor
bigintInt64BigIntGetSqlInt64Int64GetInt64
binaryByte[]VarBinaryGetSqlBinaryBinaryGetBytes
bitBooleanBitGetSqlBooleanBooleanGetBoolean
charString

Char[]
CharGetSqlStringAnsiStringFixedLength,

 String
GetString

 GetChars
date

(SQL Server 2008 and later)
DateTimeDateGetSqlDateTimeDateGetDateTime
datetimeDateTimeDateTimeGetSqlDateTimeDateTimeGetDateTime
datetime2

(SQL Server 2008 and later)
DateTimeDateTime2NoneDateTime2GetDateTime
datetimeoffset

(SQL Server 2008 and later)
DateTimeOffsetDateTimeOffsetnoneDateTimeOffsetGetDateTimeOffset
decimalDecimalDecimalGetSqlDecimalDecimalGetDecimal
FILESTREAM attribute (varbinary(max))Byte[]VarBinaryGetSqlBytesBinaryGetBytes
floatDoubleFloatGetSqlDoubleDoubleGetDouble
imageByte[]BinaryGetSqlBinaryBinaryGetBytes
intInt32IntGetSqlInt32Int32GetInt32
moneyDecimalMoneyGetSqlMoneyDecimalGetDecimal
ncharString

Char[]
NCharGetSqlStringStringFixedLengthGetString

 GetChars
ntextString

Char[]
NTextGetSqlStringStringGetString

 GetChars
numericDecimalDecimalGetSqlDecimalDecimalGetDecimal
nvarcharString

Char[]
NVarCharGetSqlStringStringGetString

 GetChars
realSingleRealGetSqlSingleSingleGetFloat
rowversionByte[]TimestampGetSqlBinaryBinaryGetBytes
smalldatetimeDateTimeDateTimeGetSqlDateTimeDateTimeGetDateTime
smallintInt16SmallIntGetSqlInt16Int16GetInt16
smallmoneyDecimalSmallMoneyGetSqlMoneyDecimalGetDecimal
sql_variantObject *VariantGetSqlValue *ObjectGetValue *
textString

Char[]
TextGetSqlStringStringGetString

 GetChars
time

(SQL Server 2008 and later)
TimeSpanTimenoneTimeGetDateTime
timestampByte[]TimestampGetSqlBinaryBinaryGetBytes
tinyintByteTinyIntGetSqlByteByteGetByte
uniqueidentifierGuidUniqueIdentifierGetSqlGuidGuidGetGuid
varbinaryByte[]VarBinaryGetSqlBinaryBinaryGetBytes
varcharString

Char[]
VarCharGetSqlStringAnsiString, StringGetString

 GetChars
xmlXmlXmlGetSqlXmlXmlnone

* Use a specific typed accessor if you know the underlying type of the sql_variant.

For more information about SQL Server data types, see Data Types (Database Engine).

SQL Server Data Types and ADO.NET
SQL Server Binary and Large-Value Data
Data Type Mappings in ADO.NET
Configuring Parameters and Parameter Data Types
ADO.NET Managed Providers and DataSet Developer Center

Show: