Odpowiednik C # SQL Server DataTypes

594

W przypadku poniższych typów danych programu SQL Server jaki typ danych odpowiadałby w języku C #?

Dokładna numeracja

bigint
numeric
bit
smallint
decimal
smallmoney
int
tinyint
money

Przybliżone wartości liczbowe

float
real

Data i godzina

date
datetimeoffset
datetime2
smalldatetime
datetime
time

Ciągi znaków

char
varchar
text

Ciągi znaków Unicode

nchar
nvarchar
ntext

Ciągi binarne

binary
varbinary
image

Inne typy danych

cursor
timestamp
hierarchyid
uniqueidentifier
sql_variant
xml
table

(źródło: MSDN )

George Stocker
źródło
1
Myślę, że tego właśnie możesz szukać: Mapowanie danych parametrów CLR
Andrew Hare

Odpowiedzi:

1091

Dotyczy to SQL Server 2005 . Istnieją zaktualizowane wersje tabeli dla SQL Server 2008 , SQL Server 2008 R2 , SQL Server 2012 i SQL Server 2014 .

Typy danych programu SQL Server i ich odpowiedniki .NET Framework

W poniższej tabeli wymieniono typy danych Microsoft SQL Server, ich odpowiedniki w środowisku uruchomieniowym języka wspólnego (CLR) dla SQL Server w przestrzeni nazw System.Data.SqlTypes oraz ich rodzime odpowiedniki CLR w 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
Örjan Jämte
źródło
2
int w .NET jest taki sam jak Int32 w tej tabeli, więc będzie to również int w SQL Server.
Örjan Jämte
Którego typu danych CLR (SQL Server) należy używać shortw .NET Framework?
Yogesh Patel,
3
@yogeshpatel, short( docs.microsoft.com/en-us/dotnet/csharp/language-reference/... ) jest równy System.Int16 w tej aukcji. To byłoby małe w SQL Server.
Örjan Jämte
34

Mapowanie typów danych SQL Server i .Net

Mapowanie typów danych SQL Server i .Net

Must.Tek
źródło
7

SQL Server i .NET Framework są oparte na systemach różnych typów. Na przykład, struktura .NET Framework dziesiętny posiada skalę maksymalnie 28, podczas gdy dziesiętny SQL Server i numeryczne typy danych mają maksymalną skalę z 38. Kliknij Oto link ! dla szczegółów

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

Salman
źródło
Czy możesz wyjaśnić, dlaczego otrzymuję -1 za tę odpowiedź?
Salman,
8
To nie ja głosowałem za odpowiedzią, ale najlepiej odpowiedzieć na pytanie, a nie podać link.
Esteban Verbel
6

Jeśli ktoś szuka metod konwersji z / na C # i SQL Server, oto prosta implementacja:

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;
}

Edycja: poprawiono literówkę

AndreFeijo
źródło