能否将Type类型存入SQL Server?应使用何种SQL数据类型?
解决方案:存储枚举Type到SQL Server
核心结论
可以存储Type类型,本质是存储枚举类型的完整限定名称字符串(而非Type对象本身)。SQL侧使用NVARCHAR(255)(或VARCHAR(255))数据类型即可满足需求。
具体实现步骤
存储时:将Type转换为字符串
把RefEnumType对应的枚举类型完整限定名(包含命名空间)提取出来,存入数据库字段,示例代码修改如下:' 提取枚举类型的完整限定名 Dim enumTypeName As String = L.RefEnumType.FullName ' 示例值:"YourNamespace.Language" ' 将enumTypeName写入SQL的NVARCHAR字段读取时:从字符串还原Type
从数据库取出存储的字符串后,通过Type.GetType()方法还原Type对象,再传入下拉框填充方法:' 从数据库读取存储的枚举类型名称 Dim storedEnumName As String = "YourNamespace.Language" Dim enumType As Type = Type.GetType(storedEnumName) ' 调用下拉框填充方法 EnumToDropDownList(yourComboBox, enumType)
关键注意事项
- 类型名称稳定性:如果后续修改枚举的命名空间或类名,数据库中存储的旧名称会无法还原Type,需提前规划好类型命名规则。
- 跨程序集处理:若枚举定义在单独的程序集中,
Type.GetType()需要传入包含程序集信息的完整名称,格式为"命名空间.枚举名, 程序集名称",例如"MyApp.Enums.Language, MyApp.Core"。
完整存储示例
' 初始化LayoutProperty对象 Dim L As New LayoutProperty With { .DisplayIndex = 1, .Enabled = True, .GroupName = "ABC", .LayoutObject = LayoutObject.DropDownList, .Name = "Test", .Visible = True, .RefEnumType = GetType(Language) } ' 提取类型名用于数据库存储 Dim typeToStore As String = If(L.RefEnumType IsNot Nothing, L.RefEnumType.FullName, Nothing)
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

