如何将 System.Type 解析为 System.Data.DbType?
查找 System.Data.DbType 的最佳方法是什么
系统命名空间中基类库类型的枚举值?
What is the best way to find System.Data.DbType
enumeration value for Base Class Library types in System namespace?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我知道这是一个已经回答的老问题,但是使用
SqlParameter
有更简单的方法,它已经实现了这个逻辑。这是特定于SqlServer的,但是Postgre、MySql等的提供者都有相应的实现。
这是一个完整的函数,它处理不可为空、可为空的基本类型、小数和字符串
如何获取SqlParameter:
对于SqlServer,根据您的.netframework版本,您可以在System.Data中找到
SqlParamter
类型, System.Data.SqlClient nuget 和 Microsoft.Data.SqlClient nugetSqlParameter 的源代码:
<一个href="https://github.com/dotnet/SqlClient/blob/d6f2e29cda769e711988c64d3cb57eb5010a3e9c/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlParameter.cs#L341" rel="noreferrer">SqlParameter 正在使用 此一段代码是非常接近已接受的答案所提议的内容。
I know it is old question which is already answered, but there is easier way by using
SqlParameter
, which already has this logic implemented.This is specific for SqlServer, but the providers for Postgre, MySql .. etc have corresponding implementations.
Here is a complete function which handles non-nullable, nullable primitive types, decimal and string
How to get SqlParameter:
For SqlServer, depending on your .netframework version you can find the
SqlParamter
type in System.Data, System.Data.SqlClient nuget and Microsoft.Data.SqlClient nugetSource code for SqlParameter:
The implementation of SqlParameter is using this piece of code which is pretty close to what the accepted answer is proposing.
我不知道任何自动化逻辑,您应该自己进行映射,因为这些是不同的类型,.NET Framework 无法单独为您完成此操作。
请参阅此处的整个映射表:SQL Server 数据类型映射 (ADO.NET) 你可以想象,对于 Oracle、MySQL、sqlite 和其他引擎,也可能有类似的表,具体取决于 .NET 数据提供程序/连接
I am not aware of any automated logic, you should do the mapping yourself because those are different types and the .NET Framework cannot do this for you alone.
see here the whole mapping table: SQL Server Data Type Mappings (ADO.NET) you can imagine that for Oracle, MySQL, sqLite and other engines there could be similar tables also depending on the .NET data provider / connect
我将其留在这里,以防其他人碰巧需要 alexn 的答案中提到的 Dapper 查找表的逆。 (它不会处理可空值)
I'm leaving this here in case anyone else should happen to need the inverse of the Dapper lookup-table mentioned in alexn's answer. (it won't handle nullables)
一种常见的方法是使用类型映射,显式映射所有支持的类型(不同的连接器/提供程序支持不同的类型)。 的类型映射:
以下是 Dapper 相关的DbType,您需要做的就是:
A common way is to have a type map, with all supported types (different connectors/providers supports different types) explicitly mapped. Here is the type map for Dapper:
To get a relevant DbType, all you need to do is:
您可以使用
System.Web.UI.WebControls.Parameter
类中的ConvertTypeCodeToDbType
方法将TypeCode
转换为DbType
: a href="https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.parameter.converttypecodetodbtype(v=vs.110).aspx" rel="noreferrer">Parameter.ConvertTypeCodeToDbType 方法。要获取
TypeCode
,您可以使用方法Type.GetTypeCode(Type type)
。You can convert
TypeCode
toDbType
using methodConvertTypeCodeToDbType
inSystem.Web.UI.WebControls.Parameter
class: Parameter.ConvertTypeCodeToDbType Method.To get
TypeCode
you can use methodType.GetTypeCode(Type type)
.您查看文档 - SQL Server 数据类型映射 (ADO.NET)。
其他提供商的映射也已记录。
这些为您提供了编写转换器的足够信息。
You look at the documentation - SQL Server Data Type Mappings (ADO.NET).
The mappings for other providers are also documented.
These give you enough information to write a converter.