You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将Type类型存入SQL Server?应使用何种SQL数据类型?

解决方案:存储枚举Type到SQL Server

核心结论

可以存储Type类型,本质是存储枚举类型的完整限定名称字符串(而非Type对象本身)。SQL侧使用NVARCHAR(255)(或VARCHAR(255))数据类型即可满足需求。

具体实现步骤

  1. 存储时:将Type转换为字符串
    把RefEnumType对应的枚举类型完整限定名(包含命名空间)提取出来,存入数据库字段,示例代码修改如下:

    ' 提取枚举类型的完整限定名
    Dim enumTypeName As String = L.RefEnumType.FullName ' 示例值:"YourNamespace.Language"
    ' 将enumTypeName写入SQL的NVARCHAR字段
    
  2. 读取时:从字符串还原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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:35:41