転送:データのSqlBulkCopy大きなクラス(以上1万)試験中に挿入

転送します。https://www.cnblogs.com/LenLi/p/3903641.html

ボーは、より明白なデータを3万行に、プライマリ・インスタンスを組み合わせて、それを自分自身をテストします!

約バルクデータ中のデータベースに挿入されたブログ、ストアドプロシージャの種類に渡すことによって、動作パラメータ表に関連付けることができる上に述べたように、私は、プロセスの効率を試験しませんでした。後でSqlBulkCopyクラスによる大規模なデータ挿入であることが判明見つけ、この記事では、このクラスの役割を紹介し、(命令挿入と比較して)効率の関連するテストを行います。

SqlBulkCopyは唯一のいずれかになります、同じサーバー上のリモートサーバー上に存在することができ、SqlServerのテーブルにデータを書き込むことができます。もちろん、データのみのSQLServerデータソースではないことを書き込まれる、データ・ソースは、データは、データを読み出すデータテーブルまたはDataReaderの中にロードすることができる限り、任意であってもよいです。

一括挿入データSqlBulkCopyクラスコードは次のとおりです。

1.まず、データベース内のUserクラスに対応するユーザーテーブルを作成します。

コードをコピー
1つのパブリッククラスユーザ
 2 { 
 3パブリックユーザ()
 4 { 
 5          
 6} 
 7パブリック文字列ユーザー名{得ます。セット; } 
 8パブリック文字列のパスワード{得ます。セット; } 
 9つのパブリック列アドレス{得ます。セット; } 
10パブリック文字列電話{得ます。セット; } 
11}
コードをコピー

ユーザーデータベースのテーブル構造:

2.保存されたデータテーブルは、データの1万方法を返さ作成します。

コードをコピー
1保護されたデータテーブルGetDataTableData()
 2 { 
 3一覧<ユーザー> USERLIST =新しいリスト<ユーザー>(); 
 図4は、のために(INT i = 0; I ++; iは10000 <)
 5 { 
 )(6ユーザのユーザ=新しいユーザーを、
 7 user.UserName = "zhangsan"。
 8 user.PassWord = "123456"。
 9 user.Address = "北京路一号"。
10 user.Telephone = "13232323232"。
11 userList.Add(ユーザ)。
12} 
13(データテーブルDT =新しいデータテーブル())を用いて
14 { 
15 dt.Columns.Add( "ユーザー名"、typeof演算(文字列))。
16 dt.Columns.Add( "パスワード"、typeof演算(列))。
17 dt.Columns.Add( "住所"、typeof演算(文字列));
18 dt.Columns.Add( "電話"、typeof演算(列))。
19 foreachの(ユーザリスト内のユーザのユーザ)
20 { 
21のDataRow DR = dt.NewRow()。
22 DR [ "ユーザー名"] = user.UserName。
23 DR [ "パスワード"] = user.PassWord。
24 DR [ "住所"] = user.Address。
25 DR [ "電話"] = user.Telephone。
26 dt.Rows.Add(DR)。
27} 
28リターンDT。
29} 
30}
コードをコピー

3.ページ上のボタンは、あなたがデータ挿入操作用のボタンをクリックすることができ、次のように、ボタンのクリックイベントのコードは次のとおりです。

コードをコピー
。のButton1 Click 1(SENDERオブジェクト、のEventArgs E)ボイド保護
 2 { 
 3列コンストラクタConfigurationManager.ConnectionStrings = [ "コンストラクタ"]のConnectionString ;.。
 4 = SqlConnectionの新しい新しい接続SqlConnectionオブジェクト(コンストラクタ);。
 。5試みは
 6 { 
 7(使用= SqlBulkCopy新しい新しいバルク・コピーSqlBulkCopy。 (コンストラクタ、SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.UseInternalTransaction))
 8 { 
 9 bulkCopy.DestinationTableName = "dboが[ユーザー]"; //ターゲット表、あなたがするテーブルにデータを挿入することを
10 bulkCopy.ColumnMappings.Add (「ユーザー名」、「ユーザー名」 ); //データ・ソースとターゲットテーブルの列名との間の属性マッピング
11 bulkCopy.ColumnMappings.Add(「パスワード」、「パスワード」)。
12 BulkCopy.ColumnMappings.Add( "アドレス"、 "住所")であり
、13はbulkCopy.ColumnMappings.Add( "電話"、 "電話")で
14 GetDataTableDataデータテーブルDT =(); //データソース
15 //バルク・コピー。 。= 3のBatchSize; 
16ストップウォッチストップウォッチ(=ストップウォッチ新しい新規); //ストップウォッチ、そのような統計は時間であってもよい
17 stopwatch.Start(); //ストップウォッチ開始
18 bulkCopy.WriteToServer(dt)を; //データソースターゲット表にデータを書き込む
//エンドストップウォッチは、までの経過時間の統計値; 19のResponse.Writeは、(+ stopwatch.Elapsed「使用時間データを挿入する」)
20である} 
21である} 
22は、キャッチ(例外EX)である
23は{ 
24新しい例外(ex.Message)を投げます。
25}
26のResponse.Write( "成功したインサートを<BR/> !!!"); 
27}
コードをコピー

次のようにステートメントの挿入コードでのSQLServer一括で挿入データは以下のとおりです。

1.まず、1万データを挿入データを挿入し、まったく同じデータSqlBulkCopyを挿入するストアドプロシージャを作成します。

 

コードをコピー
1 PROC USP_InsertUserTable CREATE 
 AS 2 
 BEGIN 3 
 @iがint 4 DECLAREを
 I = 1 @ 5 SET 
 6 WHILE @i <10001 
 7開始
 DBO INTO 8 INSERTを[ユーザー] 
 9(ユーザ名、
10パスワード、
11のアドレス、
12電話番号
13)
14 VALUES(N'zhangsan」、 -ユーザ名- NVARCHAR(50)
15 N'123456' 、 -パスワード- NVARCHAR(6)
16 N '北京路一号'、 -アドレス-データ型はnvarchar(50)
17 '13232323232' -電話- VARCHAR(11)
18)
19
I = @ I + 1 @ 20 SET 
21 END 
22 END
コードをコピー

 

2.ストアドプロシージャを実行します。
EXEC dbo.USP_InsertUserTable

次のようにINSERTステートメントを指定してSqlBulkCopy効率試験の比較は次のとおりです。

SqlBulkCopy時間を過ごした統計(5回):

:TSQL_Durationを使用してテンプレートをテストするには、「SQL Serverプロファイラ - SqlServerのINSERT文は、ツールを使用して、(5)時間統計を費やしてきました

もう一つ注意すべき:テストの実施に影響を与えないように、次のように挿入文または動作SqlBulkCopyかどうか、各テストの前にバッファをクリーンアップし、元のデータを削除するために行われる必要があります。

DBCC DROPCLEANBUFFERS
DBCC FREESYSTEMCACHE( 'ALL') 
DBOを削除します。[ユーザー]

 

結論:上記のテストの統計分析は、それを見ることができるSqlBulkCopy大規模なデータ挿入操作のパフォーマンス効率INSERT文よりもはるかに効率的です。

おすすめ

転載: www.cnblogs.com/newcapecjmc/p/10948154.html