将日期字段比较为两个数据表

时间:2015-12-29 10:24:02

标签: mysql vb.net datatable compare

我有两个DataTables,我需要比较它们的三列。

第一个DataTable是在vb.net中使用以下代码创建的:

Using DT1 As DataTable = New DataTable
    With DT1
        .Columns.Add("Type", GetType(String))
        .Columns.Add("In_Date", GetType(Date))
        .Columns.Add("Out_Date", GetType(Date))
        .Columns.Add("RowNum", GetType(Byte))
        .PrimaryKey = {.Columns("RowNum")}
    End With
'...

另一个DataTable是通过查询MySql数据库创建的,因此所有字段都是字符串。

当日期字段为''时,查询返回空字符串(NULL):

SELECT IdEv, Type, 
       IF(In_Date='0000-00-00' 
          OR In_Date IS NULL,'',DATE_FORMAT(In_Date, '%d/%m/%Y')
          ) AS In_Date, 
       IF(Out_Date='0000-00-00' 
          OR Out_Date IS NULL,'',DATE_FORMAT(Out_Date, '%d/%m/%Y')
          ) AS Out_Date,
       IdLi 
FROM MyTable 
WHERE IdLi = 1

经过多次尝试失败后,现在我正在这样做:

为了使字段具有可比性,我运行循环将所有空字符串更改为日期字段DBNull.Value

For x As Short = 0 To DT2.Rows.Count - 1
    If DT2.Rows(x)("In_Date") = "" Then DT2.Rows(x)("In_Date") = DBNull.Value
    If DT2.Rows(x)("Out_Date") = "" Then DT2.Rows(x)("Out_Date") = DBNull.Value
Next

然后我将与此代码进行比较:

If Not DT1.Rows(x)("Type").Equals(DT2.Rows(x)("Type")) OrElse Not _
   If(IsDBNull(DT1.Rows(x)("In_Date")), 0, CDate(DT1.Rows(x)("In_Date"))).Equals(If(IsDBNull(DT2.Rows(x)("In_Date")), 0, CDate(DT2.Rows(x)("In_Date")))) OrElse _
   If(IsDBNull(DT1.Rows(x)("Out_Date")), 0, CDate(DT1.Rows(x)("Out_Date"))).Equals(If(IsDBNull(DT2.Rows(x)("Out_Date")), 0, CDate(DT2.Rows(x)("Out_Date")))) Then

我做了一些测试,似乎有效,但我害怕错误的结果。

如果我的代码能够正常工作并给我正确答案,你能说我吗?

1 个答案:

答案 0 :(得分:0)

如果您有两张桌子,可以像下面那样进行比较

For x As Short = 0 To DT2.Rows.Count - 1
    If DT1.Select("In_Date='" & DT2.Rows(x)("In_Date") & "'").Length >=1 Then 
    '' Existing 
     Else
     '' Not Existing
   End If
Next