[.net mvc][SQL] 大量批次新增 Bulk Insert (SqlBulkCopy)

有時候我們會有需要大量資料新增進SQL Table裡面,如檔案上傳(該檔案全部寫入SQL Table),這時候我們並不會用Transaction 包著然後用for 跑Insert迴圈,因為這樣所花費的時間是非常大的。

 

我們會使用SqlBulkCopy 的方式來做Insert 的動作

 

至於SqlBulkCopy 的多載有甚麼?

 

我這邊提供 MSDN 的文件

 

下方範例是用包含著Transaction的方式

 

BatchSize 的說明 參考 黑大的文章

 

主要是說明BatchSize 的用途,讓Bulk Insert 過程中每1000筆Commit一次(主要是log的問題)

 

只要把DataTable 定義好欄位(Table欄位和DataTable欄位對應)、資料

 

WriteToServer(DataTable) 即可

public bool ExecSqlBulkCopy(DataTable dtSource)

        {

            using (SqlConnection connection = new SqlConnection(strConnMain))

            {

                connection.Open();

                SqlTransaction sqlTrans = connection.BeginTransaction();

                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, sqlTrans))

                {

                    DataTable dt = dtSource;

                    bulkCopy.DestinationTableName = "Table名稱";

                    bulkCopy.BatchSize = 1000;

                    bulkCopy.BulkCopyTimeout = 60;                   

                    try

                    {                                       

                        bulkCopy.WriteToServer(dt);

                    }

                    catch (Exception)

                    {

                        sqlTrans.Rollback();

                        return false;

                    }

                    sqlTrans.Commit();

                    return true;

                }

            }

        }