Каким будет соответствующий тип данных в 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)





Это для SQL Server 2005. Есть обновленные версии таблицы для SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 и SQL Server 2014.
В следующей таблице перечислены типы данных 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?
@yogeshpatel, short (docs.microsoft.com/en-us/dotnet/csharp/language-reference/…) совпадает с System.Int16 в этом листинге. Так что это было бы smallint в SQL Server.
Важное примечание: тип данных SQL «float» по умолчанию имеет значение «float (54)», которое преобразуется в C# «double». ОДНАКО, тип данных SQL "float (24)" преобразуется только в "float" C#. Поэтому, если вам не нужно много цифр точности и вы хотите улучшить производительность / память, используйте float (24) в SQL и введите «float» в C#.
SQL Server и .NET Framework основаны на системах разных типов. Например, десятичная структура .NET Framework имеет максимальный масштаб 28, тогда как десятичные и числовые типы данных SQL Server имеют максимальный масштаб 38. Щелкните Здесь ссылка! для подробностей
https://msdn.microsoft.com/en-us/library/cc716729(v=vs.110).aspx
Не могли бы вы объяснить, почему я получил -1 за этот ответ?
Не я проголосовал против ответа, но в идеале вы должны отвечать на вопрос, а не давать ссылку на него.
Если кто-то ищет методы для преобразования из / в форматы 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, хотя то, что вы сказали, не является ошибочным с технической точки зрения, это имеет смысл, когда вы используете метод ConvertSqlServerFormatToCSharp. Это всего лишь пример, вы всегда можете изменить его под свои нужды.
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,
}
Думаю, это то, что вы, возможно, ищете: Сопоставление данных параметра CLR