65.9K
CodeProject 正在变化。 阅读更多。
Home

将 System.Type 转换为 SqlDbType

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.20/5 (13投票s)

2006年12月8日

CPOL
viewsIcon

102070

将任何兼容的 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 文件中持久化数据。 TypeDescriptorGetConverter 方法检索与目标对象关联的 TypeConverter,用于执行转换。

只需在需要的地方使用此函数。 它将尽可能地获取传递给它的 System.TypeSqlDbType 等效项;否则,默认情况下,它将返回 String 数据类型等效项。 对于 SqlDbType,它返回 NVarChar

© . All rights reserved.