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
我做了一些測試,它似乎工作,但我害怕錯誤的結果。
如果我的代碼能夠完成工作並給出正確的答案,您能否說我?
通過您發佈的代碼,這似乎運作良好。 – J3soon
我沒有看到原因,爲什麼'查詢MySql數據庫'的結果必須導致只有字符串的表... – nabuchodonossor
@nabuchodonossor這不是我的選擇!我使用'使用ds As DataSet = MySqlHelper.ExecuteDataset(CnStr,SqlStr)'來獲取數據集,並且包含查詢結果的DataTable的所有字段都是'String'類型。如果有一種方法可以獲得具有'Date'類型字段的DataTable,我將很樂意使用它 – genespos