Tuesday, May 11, 2021

[VB.net][Resolved] 父資料行和子資料行沒有型別相符的資料行

我用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