【问题标题】:How to convert rules stored in Database in form of vb.net code?如何以 vb.net 代码的形式转换存储在数据库中的规则?
【发布时间】:2025-12-15 16:35:01
【问题描述】:

我们有一个要求,我们将规则存储在数据库表中,并根据这些规则在运行时验证某些属性。

下表描述了类似的结构,我们将从中提取属性名称及其各自的规则,以根据 Rule_ID 进行评估。

示例:如果我想验证属性 FirstName,我需要检查 FirstName 属性不应该为 null 并且必须包含一些值。如果此属性没有任何数据,则需要针对此属性抛出错误。

RULE_ID ATTRIBUTE_NAME      ATTRIBUTE_RULE
ABC123  FirstName              <> NULL
XYZ345  LastName               <> NULL
GHI654  Age                    <>NULL
POC123  DateOfBirth            < Sysdate
QWE675  BloodGroup             = A+ve
JKL987  City                   <> London
IUK134  Occupation             = NULL

由于存储在数据库中的规则将是Varchar即String,我们如何转换这些在字符串中的规则并使用vb.net验证代码中的属性?

请帮我解决这个问题。

【问题讨论】:

    标签: asp.net database vb.net


    【解决方案1】:

    我有类似的情况,但您需要根据自己的需要进行调整。

    基本上我创建了一系列返回布尔结果的函数

    例如用于测试非空白的函数...

    Protected Function CheckNotBlank(value As String) as Boolean
        If value <> "" then
            Return True
        Else
            Return False
        End If
    End Function
    

    要测试的函数是否小于数值...

    Protected Function CheckIsLessThan(value As Integer, compareToValue As Integer) As Boolean
        If value < compareToValue Then
            Return True
        Else
            Return False
        End If
    End Function
    

    然后你可以进行一系列检查......

    Dim ValidFlag as Integer = 0
    Dim ErrorStack as New StringBuilder
    
    If CheckNotBlank(MyValueToCheck) = False Then
        ValidFlag += 1
        ErrorStack.Append("MyValueToCheck is Blank ").Append(vbCrLf)
    End If
    If CheckIsLessThan(CheckIntegerValue, CompareToIntegerValue) = False Then
        ValidFlag += 1
        ErrorStack.Append("CheckIntegerValue is greater than CompareToIntegerValue ").Append(vbCRLF)
    End If
    If CheckNotBlank(AnotherValueToCheck) = False Then
        ValidFlag += 1
        ErrorStack.Append("AnotherValueToCheck is Blank ").Append(vbCrLf)
    End If
    ......
    If ValidFlag > 0 Then
      'We have errors
    End If
    

    您需要创建并调整您的函数以适应套件。希望有帮助!

    【讨论】: