Преобразование типов SQL Server в .Net

У меня есть следующая карта, которую я использую для преобразования между типами 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.


person user489041    schedule 12.01.2012    source источник


Ответы (3)


char не является правильным типом данных .NET для SQL Server char. Его нужно преобразовать либо в char[], либо в string, поскольку SQL char может содержать более одного символа.

Ссылка Microsoft здесь согласна со мной. Остальные выглядят правильно.

person D'Arcy Rittich    schedule 12.01.2012

Также, чтобы добавить еще один для SQL 2008, в любом случае таблица преобразуется в DataTable

Я привожу пример использования этого типа здесь SQL Хранимая процедура сервера конвертирует varchar в int

[Редактировать]

        char is not the correct .NET data type for a SQL Server char. 
    It must be converted to either char[] or string,
 since a SQL char can hold more than one character.

Кредит @RedFilter для этого

person Jordan    schedule 12.01.2012

Согласно MSDN, у вас все три (char, varchar, text) правильные.

См.: http://msdn.microsoft.com/en-us/library/system.data.sqltypes.aspx

person Shawn H    schedule 12.01.2012