我有两个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
我做了一些测试,似乎有效,但我害怕错误的结果。
如果我的代码能够正常工作并给我正确答案,你能说我吗?
答案 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