我正在编写存储过程生成器,我需要将CLR类型映射到它们的SQL Server类型。
MSDN列出了http://msdn.microsoft.com/en-us/library/ms131092.aspx的类型映射,但我不想使用大的switch语句来处理映射。
是否有一种简单的方法可以使用System.Data.SqlTypes使用的任何进程将SQL Server类型检索为字符串?
我想像这样的方法签名:
static string GetSqlType(Type clrType)
{
...
return sqlType;
}
所以给出了以下电话:
string sqlType = GetSqlType(1.GetType());
sqlType应包含:“int”。
答案 0 :(得分:2)
这更加复杂,因为它取决于您愿意定位的sql server版本。
以下是sql server如何处理datatypes in replication scenarios
的指南SQL Server Compact Edition增加了混乱,因为它不支持varchar(max),varbinary(max)列类型(您只能使用显式的~4K长度列)。
在某些时候,您还需要对具有多个选项的区域做出启发式决策。
鉴于所有这一切,在实用程序函数中使用一个简单的switch语句将比使用一些仅用于类型转换而不是文本sql创建的不透明BCL库更容易。 它还通过默认的throw或默认varchar(max)清楚地表明你的“尚未定义”的行为将在你的控制之下。
从表单的方法中返回一个简单的不可变类:
public sealed class SqlServerTypeDescription
{
// for sql text construction
public readonly string SqlServerName;
// for code construction
public readonly SqlDbType SqlDbType;
// for code construction
public readonly Type ClrType;
// constructor etc.
}
您可能还想添加可选的精度/大小值,尽管这可能是您选择留给用户的内容。