SQL Server 数据类型的 C# 等效项
Posted
技术标签:
【中文标题】SQL Server 数据类型的 C# 等效项【英文标题】:C# Equivalent of SQL Server DataTypes 【发布时间】:2010-09-30 08:04:52 【问题描述】:对于以下 SQL Server 数据类型,C# 中对应的数据类型是什么?
精确数字
bigint
numeric
bit
smallint
decimal
smallmoney
int
tinyint
money
近似数值
float
real
日期和时间
date
datetimeoffset
datetime2
smalldatetime
datetime
time
字符串
char
varchar
text
Unicode 字符串
nchar
nvarchar
ntext
二进制字符串
binary
varbinary
image
其他数据类型
cursor
timestamp
hierarchyid
uniqueidentifier
sql_variant
xml
table
(来源:MSDN)
【问题讨论】:
我认为这就是您可能正在寻找的:Mapping CLR Parameter Data 【参考方案1】:这是给SQL Server 2005的。 SQL Server 2008、SQL Server 2008 R2、SQL Server 2012 和 SQL Server 2014 的表格有更新版本。
SQL Server 数据类型及其 .NET Framework 等效项
下表列出了 Microsoft SQL Server 数据类型、它们在 System.Data.SqlTypes 命名空间中 SQL Server 的公共语言运行时 (CLR) 中的等效项,以及它们在 Microsoft SQL Server 中的本机 CLR 等效项。 .NET 框架。
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
【讨论】:
.Net 框架中的short
应该使用哪种 CLR 数据类型(SQL Server)?
@yogeshpatel, short
(docs.microsoft.com/en-us/dotnet/csharp/language-reference/…) 等于此清单中的 System.Int16。所以这将是 SQL Server 中的 smallint。
重要提示:SQL 数据类型“float”默认为“float(54)”,它转换为 C#“double”。但是,SQL 数据类型“float(24)”仅转换为 C#“float”。因此,如果您不需要很多位数的精度并希望提高性能/内存,请在 SQL 中使用 float(24),并在 C# 中键入“float”。【参考方案2】:
SQL Server 和 .Net 数据类型映射
【讨论】:
【参考方案3】:如果有人正在寻找从/转换为 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[]”将始终返回“binary”,即使它映射到 5 个其他 Sql Server 类型。 @David 虽然你说的在技术上并没有错,但是当你使用ConvertSqlServerFormatToCSharp
方法时它是有道理的。这只是一个示例,您可以随时根据自己的需要进行修改。【参考方案4】:
SQL Server 和 .NET Framework 基于不同的类型系统。例如,.NET Framework Decimal 结构的最大小数位数为 28,而 SQL Server 十进制和数字数据类型的最大小数位数为 38。单击此处为a link!详细介绍
https://msdn.microsoft.com/en-us/library/cc716729(v=vs.110).aspx
【讨论】:
你能解释一下为什么我的答案是-1吗? 不是我对答案投了反对票,但理想情况下,您应该回答问题,而不是提供链接。【参考方案5】: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,
【讨论】:
【参考方案6】:尝试以下链接: https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-data-type-mappings
SQL Server Database Engine type .NET Framework type SqlDbType enumeration SqlDataReader SqlTypes typed accessor DbType enumeration SqlDataReader DbType typed accessor
bigint Int64 BigInt GetSqlInt64 Int64 GetInt64
binary Byte[] VarBinary GetSqlBinary Binary GetBytes
bit Boolean Bit GetSqlBoolean Boolean GetBoolean
char String
Char[] Char GetSqlString AnsiStringFixedLength,
String GetString
GetChars
date 1
(SQL Server 2008 and later) DateTime Date 1 GetSqlDateTime Date 1 GetDateTime
datetime DateTime DateTime GetSqlDateTime DateTime GetDateTime
datetime2
(SQL Server 2008 and later) DateTime DateTime2 None DateTime2 GetDateTime
datetimeoffset
(SQL Server 2008 and later) DateTimeOffset DateTimeOffset none DateTimeOffset GetDateTimeOffset
decimal Decimal Decimal GetSqlDecimal Decimal GetDecimal
FILESTREAM attribute (varbinary(max)) Byte[] VarBinary GetSqlBytes Binary GetBytes
float Double Float GetSqlDouble Double GetDouble
image Byte[] Binary GetSqlBinary Binary GetBytes
int Int32 Int GetSqlInt32 Int32 GetInt32
money Decimal Money GetSqlMoney Decimal GetDecimal
nchar String
Char[] NChar GetSqlString StringFixedLength GetString
GetChars
ntext String
Char[] NText GetSqlString String GetString
GetChars
numeric Decimal Decimal GetSqlDecimal Decimal GetDecimal
nvarchar String
Char[] NVarChar GetSqlString String GetString
GetChars
real Single Real GetSqlSingle Single GetFloat
rowversion Byte[] Timestamp GetSqlBinary Binary GetBytes
smalldatetime DateTime DateTime GetSqlDateTime DateTime GetDateTime
smallint Int16 SmallInt GetSqlInt16 Int16 GetInt16
smallmoney Decimal SmallMoney GetSqlMoney Decimal GetDecimal
sql_variant Object 2 Variant GetSqlValue 2 Object GetValue 2
text String
Char[] Text GetSqlString String GetString
GetChars
time
(SQL Server 2008 and later) TimeSpan Time none Time GetDateTime
timestamp Byte[] Timestamp GetSqlBinary Binary GetBytes
tinyint Byte TinyInt GetSqlByte Byte GetByte
uniqueidentifier Guid UniqueIdentifier GetSqlGuid Guid GetGuid
varbinary Byte[] VarBinary GetSqlBinary Binary GetBytes
varchar String
Char[] VarChar GetSqlString AnsiString, String GetString
GetChars
xml Xml Xml GetSqlXml Xml none
【讨论】:
以上是关于SQL Server 数据类型的 C# 等效项的主要内容,如果未能解决你的问题,请参考以下文章