2009-06-12 72 views
9

我對「用C#插入大量數據到DB中的麻煩方式」做了一些研究,然後很多人只是建議我使用SqlBulkCopy。在我嘗試了之後,它真的讓我感到驚訝。毫無疑問,SqlBulkCopy非常快。看起來SqlBulkCopy是插入數據(尤其是大數據)的完美方式。但是我們爲什麼不在任何時候都使用它。使用SqlBulkCopy有什麼缺點嗎?SqlBulkCopy的缺點是什麼

我能想到的

回答

9

兩個原因:據我所知

  1. ,它僅適用於Microsoft SQL Server的
  2. 在很多正常的工作負載,你不這樣做批量insert S,但偶爾insert s與select s和update s混合。微軟自己聲稱,一個正常的insert更有效率,在SqlBulkCopy MSDN page

請注意,如果您想要SqlBulkCopy等效於普通插入,至少您必須將其傳遞給SqlBulkCopyOptions.CheckConstraints參數。

+0

是的,SqlBulkCopy只能用於MS SQL Server。這也只是我知道的一個缺點。有時候這不是什麼大不了的事情。例如:我們的客戶只使用MS SQL Server,我們只用屬於System.Data.SqlClient命名空間的幾個類爲他們構建應用程序。 – 2009-06-12 16:56:50

+0

爲什麼`SqlBulkCopyOptions.CheckConstraints`默認爲false? - 這是非常直觀的! – 2011-12-22 12:43:25

13

對於Oracle v11,SqlBulkCopy也存在,但它是由安裝Oracle Client時獲得的Oracle .NET程序集提供的。 SqlBulkCopy類基本上由目標數據庫引擎的提供者逐一實現。

雖然 - 一個巨大的缺點 - 絕對沒有錯誤報告。例如,如果您已更新DataSet中的數據,使用適配器將其刷回DB,並且存在重要違規(或任何其他故障),則罪魁禍首DataRows將將.HasErrors設置爲true,並且您可以將其添加到您的異常消息,當它被提出。

使用SqlBulkCopy,你只需得到錯誤的類型,就是這樣。祝你好運調試它。