Преобразование типов из SQL Server в .Net - PullRequest
5 голосов
/ 12 января 2012

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

Ответы [ 3 ]

2 голосов
/ 12 января 2012

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

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

1 голос
/ 12 января 2012

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

Я приведу пример использования этого типа здесь Хранимая процедура SQL Server преобразует 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 для этого

0 голосов
/ 12 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...