2013-03-12 51 views
0

我需要從一組表和SQLBulkInsert的攫取大量數據到另一組......不幸的是,源表都爲varchar(max)和我想的目標是正確的類型。有些表格在數百萬行中......並且(由於太多沒有意義的政策原因)我們不能使用SSIS。除此之外,一些「bool」值被存儲爲「Y/N」,一些「0/1」,一些「T/F」一些「真/假」以及最後一些「開/關」 。是否有可能從IDataReader對SQLBulkUpload進行數據類型轉換?

有沒有辦法重載IDataReader來執行類型轉換?我想要以每列爲基礎?

另一種(也許是最好的解決辦法)是把一個映射到位(也許AutoMapper或自定義),並使用EF從一個對象加載和映射到其他?這將provoide很多的控制,但也需要大量的每個屬性的樣板代碼:(

+0

BTW:順便說一句 - 有什麼理由不同時使用的SqlConnection /交易及EF在大致相同的代碼?例如對於某些情況,只需調用SQLCommand即可,而對於其他情況則使用EF模型? – BlueChippy 2013-03-12 06:20:09

+1

我有一個類似的問題 - 看看這裏的答案,它幫助我http://stackoverflow.com/q/4750653/532498 – Pleun 2013-03-12 21:29:03

回答

0

最後我寫了一個基類包裝類來容納SQLDataReader,並實現IDataReader方法只是爲了調用SQLDataReader方法。

然後從基類繼承,並在每個案例的基礎覆蓋的GetValue,查找需要翻譯列名:

public override object GetValue(int i) 
{ 
    var landingColumn = GetName(i); 
    string landingValue = base.GetValue(i).ToString(); 

    object stagingValue = null; 
    switch (landingColumn) 
    { 
    case "D4DTE": stagingValue = landingValue.FromStringDate(); break; 
    case "D4BRAR": stagingValue = landingValue.ToDecimal(); break; 

    default: 
     stagingValue = landingValue; 
     break; 
    } 
    return stagingValue; 
} 

效果很好,是可擴展的,而且速度非常快多虧SQLBulkUpload OK ,所以只需要很小的維護費用,但是由於源列很少會發生變化s並不影響任何事情。

相關問題