2015-12-29 55 views
1

我有兩個數據表,我需要比較它們的三列。比較日期字段到兩個數據表

第一個數據表是在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 
'... 

其他數據表通過查詢MySQL數據庫等各個領域都是字符串創建的。

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 

經過多次失敗的嘗試,我現在做這樣:

要使領域可比我跑

查詢時日期字段是NULL返回一個空字符串('')一個循環來改變所有空字符串爲日期字段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

通過您發佈的代碼,這似乎運作良好。 – J3soon

+1

我沒有看到原因,爲什麼'查詢MySql數據庫'的結果必須導致只有字符串的表... – nabuchodonossor

+0

@nabuchodonossor這不是我的選擇!我使用'使用ds As DataSet = MySqlHelper.ExecuteDataset(CnStr,SqlStr)'來獲取數據集,並且包含查詢結果的DataTable的所有字段都是'String'類型。如果有一種方法可以獲得具有'Date'類型字段的DataTable,我將很樂意使用它 – genespos

回答

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