У меня есть следующая карта, которую я использую для преобразования между типами SQL Server, типами SQLData и типами .NET:
/// <summary>
/// The map of types. THis maps all the corresponding types between sql server types, .net sql types, and .net types
/// </summary>
public static List<SqlTypeConversionHolder> TypeList = new List<SqlTypeConversionHolder>()
{
new SqlTypeConversionHolder("bigint", typeof(SqlInt64),typeof(Int64)),
new SqlTypeConversionHolder("binary", typeof(SqlBytes),typeof(Byte[])),
new SqlTypeConversionHolder("bit", typeof(SqlBoolean),typeof(Boolean)),
new SqlTypeConversionHolder("char", typeof(SqlChars),typeof(char)), //this one may need work
new SqlTypeConversionHolder("cursor", null,null),
new SqlTypeConversionHolder("date", typeof(SqlDateTime),typeof(DateTime)),
new SqlTypeConversionHolder("datetime", typeof(SqlDateTime),typeof(DateTime)),
new SqlTypeConversionHolder("datetime2", null,typeof(DateTime)),
new SqlTypeConversionHolder("DATETIMEOFFSET", null,typeof(DateTimeOffset)),
new SqlTypeConversionHolder("decimal", typeof(SqlDecimal),typeof(Decimal)),
new SqlTypeConversionHolder("float", typeof(SqlDouble),typeof(Double)),
//new SqlTypeConversionHolder("geography", typeof(SqlGeography),typeof(null));
//new SqlTypeConversionHolder("geometry", typeof(SqlGeometry),typeof(null));
//new SqlTypeConversionHolder("hierarchyid", typeof(SqlHierarchyId),typeof(null));
new SqlTypeConversionHolder("image", null,null),
new SqlTypeConversionHolder("int", typeof(SqlInt32),typeof(Int32)),
new SqlTypeConversionHolder("money", typeof(SqlMoney),typeof(Decimal)),
new SqlTypeConversionHolder("nchar", typeof(SqlChars),typeof(String)),
new SqlTypeConversionHolder("ntext", null,null),
new SqlTypeConversionHolder("numeric", typeof(SqlDecimal),typeof(Decimal)),
new SqlTypeConversionHolder("nvarchar", typeof(SqlChars),typeof(String)),
new SqlTypeConversionHolder("nvarchar(1)", typeof(SqlChars),typeof(Char)),
new SqlTypeConversionHolder("nchar(1)", typeof(SqlChars),typeof(Char)),
new SqlTypeConversionHolder("real", typeof(SqlSingle),typeof(Single)),
new SqlTypeConversionHolder("rowversion", null,typeof(Byte[])),
new SqlTypeConversionHolder("smallint", typeof(SqlInt16),typeof(Int16)),
new SqlTypeConversionHolder("smallmoney", typeof(SqlMoney),typeof(Decimal)),
new SqlTypeConversionHolder("sql_variant", null,typeof(Object)),
new SqlTypeConversionHolder("table", null,null),
new SqlTypeConversionHolder("text", typeof(SqlString),typeof(string)), //this one may need work
new SqlTypeConversionHolder("time", null,typeof(TimeSpan)),
new SqlTypeConversionHolder("timestamp", null,null),
new SqlTypeConversionHolder("tinyint", typeof(SqlByte),typeof(Byte)),
new SqlTypeConversionHolder("uniqueidentifier", typeof(SqlGuid),typeof(Guid)),
new SqlTypeConversionHolder("varbinary", typeof(SqlBytes),typeof(Byte[])),
new SqlTypeConversionHolder("varbinary(1)", typeof(SqlBytes),typeof(byte)),
new SqlTypeConversionHolder("binary(1)", typeof(SqlBytes),typeof(byte)),
new SqlTypeConversionHolder("varchar", typeof(SqlString),typeof(string)), //this one may need work
new SqlTypeConversionHolder("xml", typeof(SqlXml),typeof(string))
};
Первый параметр SqlTypeConversionHolder
- это имя типа сервера sql. Второй параметр - это тип .Net Sql. Третий тип .net.
Те, которые говорят This one may need work
, - это те, в которых я не уверен. Может ли кто-нибудь оказать некоторую помощь в отношении того, какими будут правильные преобразования? Глядя на MSDN, кажется, что они не имеют правильный тип преобразования. Мне трудно в это поверить. Должен быть кто-то путь от типа SQL Server к типу .NET.