C # equivalente de los tipos de datos de SQL Server

594

Para los siguientes tipos de datos de SQL Server, ¿cuál sería el tipo de datos correspondiente en C #?

Numéricos exactos

bigint
numeric
bit
smallint
decimal
smallmoney
int
tinyint
money

Numéricos aproximados

float
real

Fecha y hora

date
datetimeoffset
datetime2
smalldatetime
datetime
time

Cadenas de caracteres

char
varchar
text

Cadenas de caracteres Unicode

nchar
nvarchar
ntext

Cadenas binarias

binary
varbinary
image

Otros tipos de datos

cursor
timestamp
hierarchyid
uniqueidentifier
sql_variant
xml
table

(fuente: MSDN )

George Stocker
fuente
1
Creo que esto es lo que podría estar buscando: Mapeo de Datos de parámetro CLR
Andrew Hare

Respuestas:

1093

Esto es para SQL Server 2005 . Hay versiones actualizadas de la tabla para SQL Server 2008 , SQL Server 2008 R2 , SQL Server 2012 y SQL Server 2014 .

Tipos de datos de SQL Server y sus equivalentes de .NET Framework

La siguiente tabla enumera los tipos de datos de Microsoft SQL Server, sus equivalentes en Common Language Runtime (CLR) para SQL Server en el espacio de nombres System.Data.SqlTypes y sus equivalentes CLR nativos en 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
fuente
2
int en .NET es lo mismo que Int32 en esta tabla, por lo que también sería un int en SQL Server.
Örjan Jämte
¿Para qué tipo de datos CLR (SQL Server) se debe usar shorten .Net framework?
Yogesh Patel el
3
@yogeshpatel, short( docs.microsoft.com/en-us/dotnet/csharp/language-reference/… ) es igual a System.Int16 en este listado. Entonces eso sería smallint en SQL Server.
Örjan Jämte
34

Asignación de SQL Server y .Net Data Type

Asignación de SQL Server y .Net Data Type

Debe.Tek
fuente
7

SQL Server y .NET Framework se basan en sistemas de tipos diferentes. Por ejemplo, la estructura decimal .NET Framework tiene una escala máxima de 28, mientras que los tipos de datos numéricos y decimales de SQL Server tienen una escala máxima de 38. Haga clic aquí un enlace ! para detalles

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

Salman
fuente
¿Puede explicar por qué obtengo -1 por esta respuesta?
Salman
8
No fui yo quien rechazó la respuesta, pero idealmente deberías responder la pregunta, no proporcionar un enlace con ella.
Esteban Verbel
6

En caso de que alguien esté buscando métodos para convertir de / a C # y formatos de SQL Server, aquí va una implementación simple:

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

Editar: error tipográfico fijo

AndreFeijo
fuente