Эквивалент C# типов данных SQL Server

Каким будет соответствующий тип данных в C# для следующих типов данных SQL Server?

Точные числа

bigint
numeric
bit
smallint
decimal
smallmoney
int
tinyint
money

Приблизительные цифры

float
real

Дата и время

date
datetimeoffset
datetime2
smalldatetime
datetime
time

Строки символов

char
varchar
text

Строки символов Юникода

nchar
nvarchar
ntext

Двоичные строки

binary
varbinary
image

Другие типы данных

cursor
timestamp
hierarchyid
uniqueidentifier
sql_variant
xml
table

(источник: MSDN)

Думаю, это то, что вы, возможно, ищете: Сопоставление данных параметра CLR

Andrew Hare 08.01.2009 21:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
642
1
537 464
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Это для SQL Server 2005. Есть обновленные версии таблицы для SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 и SQL Server 2014.

Типы данных SQL Server и их эквиваленты в .NET Framework

В следующей таблице перечислены типы данных Microsoft SQL Server, их эквиваленты в среде CLR для SQL Server в пространстве имен System.Data.SqlTypes и их собственные эквиваленты CLR в Microsoft .NET Framework.

SQL Server data type          CLR data type (SQL Server)    CLR data type (.NET Framework)  
varbinary                     SqlBytes, SqlBinary           Byte[]  
binary                        SqlBytes, SqlBinary           Byte[]  
varbinary(1), binary(1)       SqlBytes, SqlBinary           byte, Byte[] 
image                         None                          None

varchar                       None                          None
char                          None                          None
nvarchar(1), nchar(1)         SqlChars, SqlString           Char, String, Char[]     
nvarchar                      SqlChars, SqlString           String, Char[] 
nchar                         SqlChars, SqlString           String, Char[] 
text                          None                          None
ntext                         None                          None

uniqueidentifier              SqlGuid                       Guid 
rowversion                    None                          Byte[]  
bit                           SqlBoolean                    Boolean 
tinyint                       SqlByte                       Byte 
smallint                      SqlInt16                      Int16  
int                           SqlInt32                      Int32  
bigint                        SqlInt64                      Int64 

smallmoney                    SqlMoney                      Decimal  
money                         SqlMoney                      Decimal  
numeric                       SqlDecimal                    Decimal  
decimal                       SqlDecimal                    Decimal  
real                          SqlSingle                     Single  
float                         SqlDouble                     Double  

smalldatetime                 SqlDateTime                   DateTime  
datetime                      SqlDateTime                   DateTime 

sql_variant                   None                          Object  
User-defined type(UDT)        None                          user-defined type     
table                         None                          None 
cursor                        None                          None
timestamp                     None                          None 
xml                           SqlXml                        None

Какой тип данных CLR (SQL Server) следует использовать для short в .Net framework?

Yogesh Patel 13.04.2018 11:28

@yogeshpatel, short (docs.microsoft.com/en-us/dotnet/csharp/language-reference/…‌) совпадает с System.Int16 в этом листинге. Так что это было бы smallint в SQL Server.

Örjan Jämte 16.04.2018 11:44

Важное примечание: тип данных SQL «float» по умолчанию имеет значение «float (54)», которое преобразуется в C# «double». ОДНАКО, тип данных SQL "float (24)" преобразуется только в "float" C#. Поэтому, если вам не нужно много цифр точности и вы хотите улучшить производительность / память, используйте float (24) в SQL и введите «float» в C#.

Jason 13.02.2021 03:37

SQL Server и .NET Framework основаны на системах разных типов. Например, десятичная структура .NET Framework имеет максимальный масштаб 28, тогда как десятичные и числовые типы данных SQL Server имеют максимальный масштаб 38. Щелкните Здесь ссылка! для подробностей

https://msdn.microsoft.com/en-us/library/cc716729(v=vs.110).aspx

Не могли бы вы объяснить, почему я получил -1 за этот ответ?

Salman 15.03.2017 14:04

Не я проголосовал против ответа, но в идеале вы должны отвечать на вопрос, а не давать ссылку на него.

Esteban Verbel 18.03.2017 03:26

Сопоставление типов данных SQL Server и .Net

SQL Server and .Net Data Type mapping

Если кто-то ищет методы для преобразования из / в форматы C# и SQL Server, вот простая реализация:

private readonly string[] SqlServerTypes = { "bigint", "binary", "bit",  "char", "date",     "datetime", "datetime2", "datetimeoffset", "decimal", "filestream", "float",  "geography",                              "geometry",                              "hierarchyid",                              "image",  "int", "money",   "nchar",  "ntext",  "numeric", "nvarchar", "real",   "rowversion", "smalldatetime", "smallint", "smallmoney", "sql_variant", "text",   "time",     "timestamp", "tinyint", "uniqueidentifier", "varbinary", "varchar", "xml" };
private readonly string[] CSharpTypes    = { "long",   "byte[]", "bool", "char", "DateTime", "DateTime", "DateTime",  "DateTimeOffset", "decimal", "byte[]",     "double", "Microsoft.SqlServer.Types.SqlGeography", "Microsoft.SqlServer.Types.SqlGeometry", "Microsoft.SqlServer.Types.SqlHierarchyId", "byte[]", "int", "decimal", "string", "string", "decimal", "string",   "Single", "byte[]",     "DateTime",      "short",    "decimal",    "object",      "string", "TimeSpan", "byte[]",    "byte",    "Guid",             "byte[]",    "string",  "string" };

public string ConvertSqlServerFormatToCSharp(string typeName)
{
    var index = Array.IndexOf(SqlServerTypes, typeName);

    return index > -1
        ? CSharpTypes[index]
        : "object";
}

public string ConvertCSharpFormatToSqlServer(string typeName)
{
    var index = Array.IndexOf(CSharpTypes, typeName);

    return index > -1
        ? SqlServerTypes[index]
        : null;
}

Обновлено: исправлена ​​опечатка

Ваш метод ConvertCSharpFormatToSqlServer всегда будет возвращать только первый найденный экземпляр, поскольку типы CSharp не уникальны, т.е. «byte []» всегда будет возвращать «двоичный», даже если он сопоставлен с 5 другими типами серверов Sql.

David 26.09.2020 11:17

@David, хотя то, что вы сказали, не является ошибочным с технической точки зрения, это имеет смысл, когда вы используете метод ConvertSqlServerFormatToCSharp. Это всего лишь пример, вы всегда можете изменить его под свои нужды.

AndreFeijo 28.09.2020 12:36
public static string FromSqlType(string sqlTypeString)
{
    if (! Enum.TryParse(sqlTypeString, out Enums.SQLType typeCode))
    {
        throw new Exception("sql type not found");
    }
    switch (typeCode)
    {
        case Enums.SQLType.varbinary:
        case Enums.SQLType.binary:
        case Enums.SQLType.filestream:
        case Enums.SQLType.image:
        case Enums.SQLType.rowversion:
        case Enums.SQLType.timestamp://?
            return "byte[]";
        case Enums.SQLType.tinyint:
            return "byte";
        case Enums.SQLType.varchar:
        case Enums.SQLType.nvarchar:
        case Enums.SQLType.nchar:
        case Enums.SQLType.text:
        case Enums.SQLType.ntext:
        case Enums.SQLType.xml:
            return "string";
        case Enums.SQLType.@char:
            return "char";
        case Enums.SQLType.bigint:
            return "long";
        case Enums.SQLType.bit:
            return "bool";
        case Enums.SQLType.smalldatetime:
        case Enums.SQLType.datetime:
        case Enums.SQLType.date:
        case Enums.SQLType.datetime2:
            return "DateTime";
        case Enums.SQLType.datetimeoffset:
            return "DateTimeOffset";
        case Enums.SQLType.@decimal:
        case Enums.SQLType.money:
        case Enums.SQLType.numeric:
        case Enums.SQLType.smallmoney:
            return "decimal";
        case Enums.SQLType.@float:
            return "double";
        case Enums.SQLType.@int:
            return "int";
        case Enums.SQLType.real:
            return "Single";
        case Enums.SQLType.smallint:
            return "short";
        case Enums.SQLType.uniqueidentifier:
            return "Guid";
        case Enums.SQLType.sql_variant:
            return "object";
        case Enums.SQLType.time:
            return "TimeSpan";
        default:
            throw new Exception("none equal type");
    }
}

public enum SQLType
{
    varbinary,//(1)
    binary,//(1)
    image,
    varchar,
    @char,
    nvarchar,//(1)
    nchar,//(1)
    text,
    ntext,
    uniqueidentifier,
    rowversion,
    bit,
    tinyint,
    smallint,
    @int,
    bigint,
    smallmoney,
    money,
    numeric,
    @decimal,
    real,
    @float,
    smalldatetime,
    datetime,
    sql_variant,
    table,
    cursor,
    timestamp,
    xml,
    date,
    datetime2,
    datetimeoffset,
    filestream,
    time,
}

Другие вопросы по теме