比较新旧字符串值的例程,如果没有新内容则维护旧数据

时间:2015-09-15 15:18:21

标签: asp.net vb.net

我有一个表单,允许用户为记录输入新数据。为了维护数据完整性,我将所有预先存在的数据(如果有)复制到记录中,并仅覆盖用户已添加新数据的那些字段。此新记录将保存到数据库并删除旧记录。

我只是想找到最有效的方法来完成每个领域:

  • 确定是否有当前要维护的数据
  • 要覆盖的新数据

我需要编写相同类型的Check for String,Decimal,Date和Integer(都可以为空)

这是我的字符串检查

 Private Function CreateRecordforSubmission() As Business.Casualty

    Dim c As Business.Casualty = Casualty

    c.alias = CheckStringValues(c.alias, txtAlias.Text.Trim())
    Return c

End Function
Private Function CheckStringValues(OldValue As String, newValue As String) As String

    If Not OldValue Is Nothing AndAlso Not String.IsNullOrEmpty(newValue) Then

        '<-- There is NEW DATA
        If Not String.IsNullOrEmpty(newValue) Then
            Return newValue
        Else
            '<-- No NEW DATA, check of there is CURRENT DATA to maintain
            If Not OldValue Is Nothing Then
                Return OldValue
            Else
                Return String.Empty
            End If
        End If

    Else
        '<-- NO CURRENT DATA AND no changes have been made
        Return String.Empty
    End If

End Function

1 个答案:

答案 0 :(得分:1)

了解CSLA是如何做到的。对象中的每个属性都可以处理该比较,如果setter检测到更改或新值,则可以更新变量并将对象标记为已修改。

Public Property Alias As String
    Get
        Return _alias
    End Get
    Set(ByVal value As String)
        If Not String.IsNullOrEmpty(value) AndAlso _alias <> value Then
            _alias = value
            _objectWasModified = True
        End If
    End Set
End Property

If语句可以在基类中,也可以在辅助类中。

如果你想为其他类型设置泛型函数,这是一个例子。这假设您使用的是可空值。

Public Property Number As Integer?
    Get
        Return _number
    End Get
    Set(ByVal value As Integer?)
        If Not IsNullOrSame(Of Integer)(_number, value)Then
            _number= value
            _objectWasModified = True
        End If
    End Set
End Property

Public Function IsNullOrSame(Of T As Structure)(ByVal oldValue As Nullable(Of T), ByVal newValue As Nullable(Of T))

    If newValue.HasValue Then
        If Not oldValue.HasValue OrElse Not oldValue.Value.Equals(newValue.Value) Then
            Return False
        End If
    End If

    Return True
End Function