次の方法で共有


SqlBulkCopy.WriteToServer メソッド

定義

オーバーロード

WriteToServer(DbDataReader)

示された DbDataReader 配列から、SqlBulkCopy オブジェクトの DestinationTableName のプロパティで指定された宛先のテーブルにすべての行をコピーします。

WriteToServer(DataRow[])

示された DataRow 配列から、SqlBulkCopy オブジェクトの DestinationTableName のプロパティで指定された宛先のテーブルにすべての行をコピーします。

WriteToServer(DataTable)

指定された DataTable のすべての行を、SqlBulkCopy オブジェクトの DestinationTableName プロパティで指定される宛先テーブルにコピーします。

WriteToServer(IDataReader)

指定された IDataReader のすべての行を、SqlBulkCopy オブジェクトの DestinationTableName プロパティで指定される宛先テーブルにコピーします。

WriteToServer(DataTable, DataRowState)

提供された DataTable 内の提供された行の状態と一致する行のみを、SqlBulkCopy オブジェクトの DestinationTableName のプロパティで指定されたコピー先のテーブルにコピーします。

WriteToServer(DbDataReader)

示された DbDataReader 配列から、SqlBulkCopy オブジェクトの DestinationTableName のプロパティで指定された宛先のテーブルにすべての行をコピーします。

public:
 void WriteToServer(System::Data::Common::DbDataReader ^ reader);
public void WriteToServer (System.Data.Common.DbDataReader reader);
member this.WriteToServer : System.Data.Common.DbDataReader -> unit
Public Sub WriteToServer (reader As DbDataReader)

パラメーター

reader
DbDataReader

対象テーブルにコピーする行が格納された DbDataReader

例外

では SqlBulkCopyColumnOrderHint 、有効な変換先列名が指定されませんでした。

適用対象

WriteToServer(DataRow[])

示された DataRow 配列から、SqlBulkCopy オブジェクトの DestinationTableName のプロパティで指定された宛先のテーブルにすべての行をコピーします。

public:
 void WriteToServer(cli::array <System::Data::DataRow ^> ^ rows);
public void WriteToServer (System.Data.DataRow[] rows);
member this.WriteToServer : System.Data.DataRow[] -> unit
Public Sub WriteToServer (rows As DataRow())

パラメーター

rows
DataRow[]

対象テーブルにコピーされる DataRow オブジェクトの配列。

例外

では SqlBulkCopyColumnOrderHint 、有効な変換先列名が指定されませんでした。

次のコンソール アプリケーションは、配列からデータを一括読み込みする方法を DataRow 示しています。 変換先テーブルは、 AdventureWorks データベース内のテーブルです。

この例では、 DataTable が実行時に作成されます。 から 1 つの行が選択され DataTable 、コピー先テーブルにコピーされます。

重要

このサンプルは、「バルク コピー サンプルのセットアップ」で説明されているように作業テーブルを作成してからでないと動作しません。 このコードでは、SqlBulkCopy だけを使用した構文について説明します。 ソース テーブルと変換先テーブルが同じSQL Server インスタンスにある場合は、Transact-SQL INSERT … SELECT ステートメントを使用してデータをコピーする方が簡単かつ高速です。

注釈

一括コピー操作の進行中は、関連付けられている宛先 SqlConnection が処理中であり、接続に対して他の操作を実行することはできません。

コレクションは ColumnMappings 、列から DataRow コピー先データベース テーブルにマップされます。

適用対象

WriteToServer(DataTable)

指定された DataTable のすべての行を、SqlBulkCopy オブジェクトの DestinationTableName プロパティで指定される宛先テーブルにコピーします。

public:
 void WriteToServer(System::Data::DataTable ^ table);
public void WriteToServer (System.Data.DataTable table);
member this.WriteToServer : System.Data.DataTable -> unit
Public Sub WriteToServer (table As DataTable)

パラメーター

table
DataTable

対象テーブルにコピーする行が格納された DataTable

例外

では SqlBulkCopyColumnOrderHint 、有効な変換先列名が指定されませんでした。

次のコンソール アプリケーションは、 からデータを一括読み込みする方法を DataTable示しています。 変換先テーブルは、 AdventureWorks データベース内のテーブルです。

この例では、 DataTable は実行時に作成され、操作の SqlBulkCopy ソースです。

重要

このサンプルは、「バルク コピー サンプルのセットアップ」で説明されているように作業テーブルを作成してからでないと動作しません。 このコードでは、SqlBulkCopy だけを使用した構文について説明します。 ソース テーブルと変換先テーブルが同じSQL Server インスタンスにある場合は、Transact-SQL INSERT … SELECT ステートメントを使用してデータをコピーする方が簡単かつ高速です。

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a connection to the AdventureWorks database.
        using (SqlConnection connection =
                   new SqlConnection(connectionString))
        {
            connection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                connection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Create a table with some rows. 
            DataTable newProducts = MakeTable();

            // Create the SqlBulkCopy object. 
            // Note that the column positions in the source DataTable 
            // match the column positions in the destination table so 
            // there is no need to map columns. 
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write from the source to the destination.
                    bulkCopy.WriteToServer(newProducts);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            // Perform a final count on the destination 
            // table to see how many rows were added.
            long countEnd = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Ending row count = {0}", countEnd);
            Console.WriteLine("{0} rows were added.", countEnd - countStart);
            Console.WriteLine("Press Enter to finish.");
            Console.ReadLine();
        }
    }

    private static DataTable MakeTable()
    // Create a new DataTable named NewProducts. 
    {
        DataTable newProducts = new DataTable("NewProducts");

        // Add three column objects to the table. 
        DataColumn productID = new DataColumn();
        productID.DataType = System.Type.GetType("System.Int32");
        productID.ColumnName = "ProductID";
        productID.AutoIncrement = true;
        newProducts.Columns.Add(productID);

        DataColumn productName = new DataColumn();
        productName.DataType = System.Type.GetType("System.String");
        productName.ColumnName = "Name";
        newProducts.Columns.Add(productName);

        DataColumn productNumber = new DataColumn();
        productNumber.DataType = System.Type.GetType("System.String");
        productNumber.ColumnName = "ProductNumber";
        newProducts.Columns.Add(productNumber);

        // Create an array for DataColumn objects.
        DataColumn[] keys = new DataColumn[1];
        keys[0] = productID;
        newProducts.PrimaryKey = keys;

        // Add some new rows to the collection. 
        DataRow row = newProducts.NewRow();
        row["Name"] = "CC-101-WH";
        row["ProductNumber"] = "Cyclocomputer - White";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-BK";
        row["ProductNumber"] = "Cyclocomputer - Black";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-ST";
        row["ProductNumber"] = "Cyclocomputer - Stainless";
        newProducts.Rows.Add(row);
        newProducts.AcceptChanges();

        // Return the new DataTable. 
        return newProducts;
    }
    private static string GetConnectionString()
    // To avoid storing the connection string in your code, 
    // you can retrieve it from a configuration file. 
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

注釈

DataTable のすべての行は、削除された行を除き、コピー先テーブルにコピーされます。

一括コピー操作の進行中は、関連付けられている宛先 SqlConnection が処理中であり、接続に対して他の操作を実行することはできません。

コレクションは ColumnMappings 、列から DataTable コピー先データベース テーブルにマップされます。

こちらもご覧ください

適用対象

WriteToServer(IDataReader)

指定された IDataReader のすべての行を、SqlBulkCopy オブジェクトの DestinationTableName プロパティで指定される宛先テーブルにコピーします。

public:
 void WriteToServer(System::Data::IDataReader ^ reader);
public void WriteToServer (System.Data.IDataReader reader);
member this.WriteToServer : System.Data.IDataReader -> unit
Public Sub WriteToServer (reader As IDataReader)

パラメーター

reader
IDataReader

対象テーブルにコピーする行が格納された IDataReader

例外

では SqlBulkCopyColumnOrderHint 、有効な変換先列名が指定されませんでした。

次のコンソール アプリケーションは、 からデータを一括読み込みする方法を SqlDataReader示しています。 変換先テーブルは、 AdventureWorks データベース内のテーブルです。

重要

このサンプルは、「バルク コピー サンプルのセットアップ」で説明されているように作業テーブルを作成してからでないと動作しません。 このコードでは、SqlBulkCopy だけを使用した構文について説明します。 ソース テーブルと変換先テーブルが同じSQL Server インスタンスにある場合は、Transact-SQL INSERT … SELECT ステートメントを使用してデータをコピーする方が簡単かつ高速です。

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a sourceConnection to the AdventureWorks database.
        using (SqlConnection sourceConnection =
                   new SqlConnection(connectionString))
        {
            sourceConnection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                sourceConnection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Get data from the source table as a SqlDataReader.
            SqlCommand commandSourceData = new SqlCommand(
                "SELECT ProductID, Name, " +
                "ProductNumber " +
                "FROM Production.Product;", sourceConnection);
            SqlDataReader reader =
                commandSourceData.ExecuteReader();

            // Set up the bulk copy object using a connection string. 
            // In the real world you would not use SqlBulkCopy to move
            // data from one table to the other in the same database.
            using (SqlBulkCopy bulkCopy =
                       new SqlBulkCopy(connectionString))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write from the source to the destination.
                    bulkCopy.WriteToServer(reader);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    // Close the SqlDataReader. The SqlBulkCopy
                    // object is automatically closed at the end
                    // of the using block.
                    reader.Close();
                }
            }

            // Perform a final count on the destination 
            // table to see how many rows were added.
            long countEnd = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Ending row count = {0}", countEnd);
            Console.WriteLine("{0} rows were added.", countEnd - countStart);
            Console.WriteLine("Press Enter to finish.");
            Console.ReadLine();
        }
    }

    private static string GetConnectionString()
    // To avoid storing the sourceConnection string in your code, 
    // you can retrieve it from a configuration file. 
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

注釈

コピー操作は、リーダーの次に使用可能な行から開始されます。 ほとんどの場合、リーダーはまたは同様の呼び出しによって ExecuteReader() 返されただけなので、次に使用可能な行は最初の行です。 複数の結果を処理するには、データ リーダーで を呼び出 NextResult() し、もう一度を呼び出 WriteToServer します。

を使用すると WriteToServer 、リーダーの状態が変更されることに注意してください。 メソッドは、false が返されるか、操作が中止されるか、エラーが発生するまで呼び出 Read() します。 つまり、データ リーダーは、操作が完了すると WriteToServer 、結果セットの最後にあると思われる別の状態になります。

一括コピー操作の進行中は、関連付けられている宛先 SqlConnection が処理中であり、接続に対して他の操作を実行することはできません。

コレクションは ColumnMappings 、データ リーダー列からコピー先データベース テーブルにマップされます。

適用対象

WriteToServer(DataTable, DataRowState)

提供された DataTable 内の提供された行の状態と一致する行のみを、SqlBulkCopy オブジェクトの DestinationTableName のプロパティで指定されたコピー先のテーブルにコピーします。

public:
 void WriteToServer(System::Data::DataTable ^ table, System::Data::DataRowState rowState);
public void WriteToServer (System.Data.DataTable table, System.Data.DataRowState rowState);
member this.WriteToServer : System.Data.DataTable * System.Data.DataRowState -> unit
Public Sub WriteToServer (table As DataTable, rowState As DataRowState)

パラメーター

table
DataTable

対象テーブルにコピーする行が格納された DataTable

rowState
DataRowState

DataRowState 列挙体の値。 特定の状態に一致する行だけが対象テーブルにコピーされます。

例外

では SqlBulkCopyColumnOrderHint 、有効な変換先列名が指定されませんでした。

次のコンソール アプリケーションは、指定した状態に一致する 内の DataTable 行のみを一括読み込みする方法を示しています。 この場合、変更されていない行のみが追加されます。 変換先テーブルは、 AdventureWorks データベース内のテーブルです。

この例では、 DataTable が実行時に作成され、3 つの行が追加されます。 メソッドが WriteToServer 実行される前に、いずれかの行が編集されます。 メソッドは WriteToServer 引数を DataRowState.UnchangedrowState 指定して呼び出されるため、変更されていない 2 つの行のみがコピー先に一括コピーされます。

重要

このサンプルは、「バルク コピー サンプルのセットアップ」で説明されているように作業テーブルを作成してからでないと動作しません。 このコードでは、SqlBulkCopy だけを使用した構文について説明します。 ソース テーブルと変換先テーブルが同じSQL Server インスタンスにある場合は、Transact-SQL INSERT … SELECT ステートメントを使用してデータをコピーする方が簡単かつ高速です。

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a connection to the AdventureWorks database.
        using (SqlConnection connection =
                   new SqlConnection(connectionString))
        {
            connection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                connection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Create a table with some rows. 
            DataTable newProducts = MakeTable();

            // Make a change to one of the rows in the DataTable.
            DataRow row = newProducts.Rows[0];
            row.BeginEdit();
            row["Name"] = "AAA";
            row.EndEdit();

            // Create the SqlBulkCopy object. 
            // Note that the column positions in the source DataTable 
            // match the column positions in the destination table so 
            // there is no need to map columns. 
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write unchanged rows from the source to the destination.
                    bulkCopy.WriteToServer(newProducts, DataRowState.Unchanged);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            // Perform a final count on the destination 
            // table to see how many rows were added.
            long countEnd = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Ending row count = {0}", countEnd);
            Console.WriteLine("{0} rows were added.", countEnd - countStart);
            Console.WriteLine("Press Enter to finish.");
            Console.ReadLine();
        }
    }

    private static DataTable MakeTable()
    // Create a new DataTable named NewProducts. 
    {
        DataTable newProducts = new DataTable("NewProducts");

        // Add three column objects to the table. 
        DataColumn productID = new DataColumn();
        productID.DataType = System.Type.GetType("System.Int32");
        productID.ColumnName = "ProductID";
        productID.AutoIncrement = true;
        newProducts.Columns.Add(productID);

        DataColumn productName = new DataColumn();
        productName.DataType = System.Type.GetType("System.String");
        productName.ColumnName = "Name";
        newProducts.Columns.Add(productName);

        DataColumn productNumber = new DataColumn();
        productNumber.DataType = System.Type.GetType("System.String");
        productNumber.ColumnName = "ProductNumber";
        newProducts.Columns.Add(productNumber);

        // Create an array for DataColumn objects.
        DataColumn[] keys = new DataColumn[1];
        keys[0] = productID;
        newProducts.PrimaryKey = keys;

        // Add some new rows to the collection. 
        DataRow row = newProducts.NewRow();
        row["Name"] = "CC-101-WH";
        row["ProductNumber"] = "Cyclocomputer - White";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-BK";
        row["ProductNumber"] = "Cyclocomputer - Black";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-ST";
        row["ProductNumber"] = "Cyclocomputer - Stainless";
        newProducts.Rows.Add(row);
        newProducts.AcceptChanges();

        // Return the new DataTable. 
        return newProducts;
    }
    private static string GetConnectionString()
    // To avoid storing the connection string in your code, 
    // you can retrieve it from a configuration file. 
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

注釈

引数に DataTable 示されている状態で削除されていない 内の rowState 行のみがコピー先テーブルにコピーされます。

注意

が指定されている場合Deleted、、AddedUnchanged、および Modified の行もサーバーにコピーされます。 例外は発生しません。

一括コピー操作の進行中は、関連付けられている宛先 SqlConnection が処理中であり、接続に対して他の操作を実行することはできません。

コレクションは ColumnMappings 、列から DataTable コピー先データベース テーブルにマップされます。

適用対象