这是相当复杂的,因为它取决于你愿意针对哪个版本的sql server。
- 对于2008年的目标,您可能希望DateTime实例映射到改进的datetime2而不是日期时间。
- TimeSpan更糟,因为您的回退选项使用DateTime或varchar。
这里是一个指导如何SQL Server将处理datatypes in replication scenarios
SQL Server精简版增加了进一步的混乱,因为它不支持varchar(max),VARBINARY(max)列类型(你只限于明确的〜4K长度的列)。
在某些时候,您还需要对具有多个选项的区域进行启发式决策。
- 文本信息可能是varchar(n)或varchar(max)。
- 小数将很好地映射到数字输入,但是是有风险的输出数值有较大规模
- 应的位图是图像还是varbinary?
- 再次显示图像已被弃用,但这可能会惹恼仍在使用它的人。
- 无符号整数
- UINT可以安全地投入BIGINT
- ULONG是相当多问题
- bigints将更加有趣。
考虑到这一切会在一个效用函数一个不错的简单switch语句将使生活更不是试图依靠仅用于类型转换,而不是文字SQL创建一些不透明BCL库更容易。
它也通过默认的抛出或默认的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.
}
您可能需要添加可选的精度/大小太超值了,虽然这可能是你选择离开给用户的东西。