将 System.Type 转换为 SqlDbType






3.20/5 (13投票s)
将任何兼容的 System.Type 转换为 SqlDbType。
引言
这是一个将任何兼容的 System.Type
转换为 SqlDbType
的通用实现,用于参数对象。
背景
我想要一个通用的方法,将系统数据类型转换为可以传递给 Parameter 对象的形式。 在网上搜索了很长时间后,我只找到了一些粗糙的实现,它们涉及复杂的 Select Case
结构。
这是我的实现
Private Function GetDBType(ByVal theType As System.Type) As SqlDbType
Dim p1 As SqlClient.SqlParameter
Dim tc As System.ComponentModel.TypeConverter
p1 = New SqlClient.SqlParameter()
tc = System.ComponentModel.TypeDescriptor.GetConverter(p1.DbType)
If tc.CanConvertFrom(theType) Then
p1.DbType = tc.ConvertFrom(theType.Name)
Else
'Try brute force
Try
p1.DbType = tc.ConvertFrom(theType.Name)
Catch ex As Exception
'Do Nothing
End Try
End If
Return p1.SqlDbType
End Function
亮点
这段代码使用了大多数对象中可用的内置转换器。 TypeConverter
对象是关键。 这些转换器也被系统用于在 XML 文件中持久化数据。 TypeDescriptor
的 GetConverter
方法检索与目标对象关联的 TypeConverter
,用于执行转换。
只需在需要的地方使用此函数。 它将尽可能地获取传递给它的 System.Type
的 SqlDbType
等效项;否则,默认情况下,它将返回 String
数据类型等效项。 对于 SqlDbType
,它返回 NVarChar
。