我用Visual Basic 的 DataRelation 將2個dataTable connect,
parent column 的mysql dataType 是int(10),
child column 的mysql dataType 是int(18)。
然後我得到一個error message「父資料行和子資料行沒有型別相符的資料行」,
網民討論原因都是說parent column 及 child column的dataType不相符。
那麼好吧,我在MySql database alter table 統一設定成dataType 為int(18),
但仍是有這個「父資料行和子資料行沒有型別相符的資料行」error message,
百思不得其解,然後我嘗試print 出兩個dataTable的dataType 出黎:
Dim dt As Datatable = dataSet.Tables(TERRAPINS_SKY)
Dim row As DataRow
Dim column As DatColumn
For Each row In dt.Rows
For Each column In dt.Columns
Debug.Writeline(row(Column) & ", (" & column.DatType.toString() &")")
Next
Debug.WriteLine(Envirnment.NewLine())
Next
dt = dataSet.Tables(TERRAPINS_SKY_DETAIL)
For Each row In dt.Rows
For Each column In dt.Columns
Debug.Writeline(row(Column) & ", (" & column.DatType.toString() &")")
Next
Debug.WriteLine(Envirnment.NewLine())
Next
然後得出作為parent的dataTables PAPAER_NAME 的key column dataType是 System.Int32,作為child的dataTables PAPAER_NAME_DETAIL 的key column dataType是 System.UInt32。
UInt32 ?!?!?這是什麼鬼!??!
原來我在MySql把其中一個table的column set了作unsigned, 所以這個column內容的data type在visual basic成了System.UInt32,而另一個table的column 沒有set unsigned, 所以這個column內容的data type在visual basic成了System.Int32,
alter table column 的sql例子:
ALTER TABLE 'lib'.'terrapinssky_table' CHNAGE COLUMN 'PAPER_ID' 'PAPER_ID' INT(18) UNSIGNED NOT NUL DEFAULT '0';
所以如果遇上「父資料行和子資料行沒有型別相符的資料行」error message,
不單要確保你想有vb relation 的兩個database table 的column data Type 相同,而且連是否unsigned也須一樣。
No comments :
Post a Comment