Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SqlDbType转换为.net类型_.net_Ado.net - Fatal编程技术网

将SqlDbType转换为.net类型

将SqlDbType转换为.net类型,.net,ado.net,.net,Ado.net,有很多示例说明如何从标准的:net类或实例转换SqlDbType枚举。我还没有在互联网上找到任何落后的解决方案。它似乎不太常见,但(我认为)应该是一种更简单的方法,然后在所有31个枚举成员上使用一个巨大的切换案例 有人知道如何更好地将SqlDbType转换为.net类型,然后切换所有可能的枚举值吗 感谢Tim Schmelter的评论。这似乎是唯一的解决方案。很奇怪,.NET没有包含这种映射(SqlTypes也有点乱),但“更好的方法”是在枚举上键入字典。如果您的项目只支持可用列类型的一个子集,

有很多示例说明如何从标准的:net类或实例转换SqlDbType枚举。我还没有在互联网上找到任何落后的解决方案。它似乎不太常见,但(我认为)应该是一种更简单的方法,然后在所有31个枚举成员上使用一个巨大的切换案例

有人知道如何更好地将
SqlDbType
转换为.net类型,然后切换所有可能的枚举值吗


感谢Tim Schmelter的评论。这似乎是唯一的解决方案。

很奇怪,.NET没有包含这种映射(SqlTypes也有点乱),但“更好的方法”是在枚举上键入字典。如果您的项目只支持可用列类型的一个子集,这也使得测试有效性变得容易。我维护一个处理动态定义的SQL表布局的项目。这样,我的库消费者只需要考虑
SqlDbType
,而不用担心内部
DataColumn
映射

内部静态只读字典等价物SystemType=新字典
{
{SqlDbType.BigInt,typeof(long)},
{SqlDbType.Binary,typeof(byte[])},
{SqlDbType.Bit,typeof(bool)},
{SqlDbType.Char,typeof(string)},
{SqlDbType.Date,typeof(DateTime)},
{SqlDbType.DateTime,typeof(DateTime)},
{SqlDbType.DateTime2,typeof(DateTime)},//SQL2008+
{SqlDbType.DateTimeOffset,typeof(DateTimeOffset)},//SQL2008+
{SqlDbType.Decimal,typeof(Decimal)},
{SqlDbType.Float,typeof(double)},
{SqlDbType.Image,typeof(byte[])},
{SqlDbType.Int,typeof(Int)},
{SqlDbType.Money,typeof(decimal)},
{SqlDbType.NChar,typeof(string)},
{SqlDbType.NVarChar,typeof(string)},
{SqlDbType.Real,typeof(float)},
{SqlDbType.SmallDateTime,typeof(DateTime)},
{SqlDbType.SmallInt,typeof(short)},
{SqlDbType.SmallMoney,typeof(decimal)},
{SqlDbType.Time,typeof(TimeSpan)},//SQL2008+
{SqlDbType.TinyInt,typeof(byte)},
{SqlDbType.UniqueIdentifier,typeof(Guid)},
{SqlDbType.VarBinary,typeof(byte[])},
{SqlDbType.VarChar,typeof(string)},
{SqlDbType.Xml,typeof(SqlXml)}
//省略的特殊类型:时间戳
//省略了不推荐的类型:ntext、text
//枚举不支持:数值、文件流、行版本、sql\u变量
};

No,没有映射:用SqlDbType作为键,clr type作为值填充字典。我不知道为什么.NET没有这样一个字典。一般来说,在这个边界上工作的任何代码都需要在任意一侧使用特定的类型(结果集/参数中的类型,.NET一侧的变量/字段中的类型),因此,不需要真正的通用映射。@Damien_The_Noisever我维护一个拥有数十万用户的开放源码软件包,其中包括动态创建SQL表。它在内部使用
DataColumn
,因此肯定需要通用映射。当然,这并不难。FWIW、
timestamp
rowversion
是同一件事,并映射到
字节[]
。我认为
sql\u variant
可以映射到
Object