ホームページ > データベース > mysql チュートリアル > C# を使用して SQL データベースに DataTable を効率的に一括挿入するにはどうすればよいですか?

C# を使用して SQL データベースに DataTable を効率的に一括挿入するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-07 22:13:43
オリジナル
493 人が閲覧しました

How Can I Efficiently Bulk Insert a DataTable into a SQL Database Using C#?

C# での SqlBulkCopy によるデータ挿入の最適化

大規模なデータセットの場合、SQL Server データベースにデータを 1 行ずつ挿入するのは非効率です。 C# の SqlBulkCopy クラスは、一括挿入操作の大幅に高速な代替手段を提供します。

一括挿入に SqlBulkCopy を利用する

SqlBulkCopy は、単一の最適化されたトランザクションで大量のデータをデータベース テーブルに転送するように設計されています。 実装方法は次のとおりです:

<code class="language-csharp">using System.Data.SqlClient;

// Establish connection and create SqlBulkCopy object
using (var bulkCopy = new SqlBulkCopy(_connection.ConnectionString, SqlBulkCopyOptions.KeepIdentity))
{
    // Map DataTable columns to database columns
    foreach (DataColumn column in table.Columns)
    {
        bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);
    }

    // Specify destination table
    bulkCopy.DestinationTableName = destinationTableName;

    // Set timeout (in seconds) to prevent timeouts on large datasets
    bulkCopy.BulkCopyTimeout = 600;

    // Perform the bulk copy operation
    bulkCopy.WriteToServer(table);
}</code>
ログイン後にコピー

説明:

  • _connection.ConnectionString: データベース接続文字列。
  • table: 挿入されるデータを含む DataTable
  • destinationTableName: SQL Server データベース内のターゲット テーブルの名前。

重要な考慮事項:

  • 列マッピング: DataTable 列名がデータベースの列名と正確に一致していることを確認してください。 異なる場合は、それに応じて ColumnMappings を調整します。
  • アイデンティティ列: SqlBulkCopyOptions.KeepIdentity は、DataTable.
  • からのアイデンティティ列の値を保持します。
  • タイムアウト: BulkCopyTimeout は、特に大量のデータセットにとって重要な操作のタイムアウトを防ぎます。 データ量とネットワークの状態に基づいて、必要に応じてこの値を調整します。

この方法では、個々の行を挿入する場合と比べてデータベースの挿入速度が大幅に向上し、大規模なデータセットを処理する際のアプリケーションのパフォーマンスが大幅に向上します。

以上がC# を使用して SQL データベースに DataTable を効率的に一括挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート