[英]Mapping CLR Parameter Data
我正在编写存储过程生成器,并且需要将CLR类型映射到其SQL Server类型。
MSDN在以下位置列出了类型映射: http : //msdn.microsoft.com/zh-cn/library/ms131092.aspx,但是我不想使用大的switch语句来处理映射。
是否有一种简单的方法可以使用System.Data.SqlTypes使用的任何过程以字符串形式检索SQL Server类型?
我想要这样的方法签名:
static string GetSqlType(Type clrType)
{
...
return sqlType;
}
因此,给出以下调用:
string sqlType = GetSqlType(1.GetType());
sqlType应该包含:“ int”。
这变得相当复杂,因为它取决于您希望定位的SQL Server版本。
这是有关SQL Server 在复制方案中如何处理数据类型的指南
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.
}
您可能也想添加可选的精度/尺寸值,尽管这可能是您选择留给用户的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.