2015-12-15 196 views
-1

我已經編寫了一個程序,該程序使用OleDB查詢來填充DataTable,然後使用BulkLoader將其加載到MySQL數據庫中。我遇到的問題是將OleDB布爾類型列轉換爲MySQL中的等效項。我知道MySQL中沒有BOOL,所以我嘗試使用TINYINT,但沒有運氣。我認爲問題在於,我需要10才能使用BulkLoaderTRUEFALSE將DataTable列從布爾轉換爲Int

這是中間CSV文件中列的樣子;

enter image description here

我以爲會是這樣做僅僅是寫一個foreach循環,通過雲的一個簡單的方法,使每一個TRUE = 1FALSE = 2,這樣的事情;

foreach (DataRow column in dTable.Rows) 
{ 
    if (Convert.ToBoolean(column[16]) == true) 
    { 
     column[16] = 1; 
    } 
    else 
    { 
     column[16] = 0; 
    } 
} 

這完全相同的輸出端然而如上所示的圖像,但它仍然解析一切TRUEFALSE代替10。我現在想,我可能必須將DataTable列的類型從布爾型轉換爲整型,但我不確定如何做到這一點,或者如果它是最簡單的方法。

+0

這是應該預料的。該列的DataType是布爾型而不是int型。不知道,但您似乎需要更改列的數據類型或創建一個int類型的新列 – Steve

+0

一旦有數據,就不能更改列類型。否則,請使用'dTable.Columns [16] .DataType = typeof(int);' – Irshad

+0

如果您在以下答覆中看到答案,請將其標記爲答案。請閱讀本文: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – StepUp

回答

1

一旦有數據,就不能更改列類型。但是,可以做這樣的事情;

DataTable dtCloned = dt.Clone(); 
dtCloned.Columns["YouColumnName"].DataType = typeof(int); 
foreach (DataRow row in dTable.Rows) 
    dtCloned.ImportRow(row); 
+0

偉大的東西謝謝。只是添加有一種方法可以使這個非硬編碼的一列?我將會有許多布爾列,並且對於我所有的列都使用它會非常耗時。 – CBreeze

+0

爲什麼-1?請解釋。 – Irshad

+0

@CBreeze答案已更新。 – Irshad