SqlBulkCopy.WriteToServer Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Přetížení
WriteToServer(DbDataReader) |
Zkopíruje všechny řádky ze zadaného DbDataReader pole do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy . |
WriteToServer(DataRow[]) |
Zkopíruje všechny řádky ze zadaného DataRow pole do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy . |
WriteToServer(DataTable) |
Zkopíruje všechny řádky v zadaném DataTable objektu do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy . |
WriteToServer(IDataReader) |
Zkopíruje všechny řádky v zadaném IDataReader objektu do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy . |
WriteToServer(DataTable, DataRowState) |
Zkopíruje pouze řádky, které odpovídají zadanému stavu řádku zadaného DataTable do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy . |
WriteToServer(DbDataReader)
Zkopíruje všechny řádky ze zadaného DbDataReader pole do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .
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)
Parametry
- reader
- DbDataReader
A DbDataReader , jehož řádky budou zkopírovány do cílové tabulky.
Výjimky
Parametr nezadal SqlBulkCopyColumnOrderHint platný název cílového sloupce.
Platí pro
WriteToServer(DataRow[])
Zkopíruje všechny řádky ze zadaného DataRow pole do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .
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())
Parametry
Výjimky
Parametr nezadal SqlBulkCopyColumnOrderHint platný název cílového sloupce.
Příklady
Následující konzolová aplikace ukazuje, jak hromadně DataRow načíst data z pole. Cílová tabulka je tabulka v databázi AdventureWorks .
V tomto příkladu se vytvoří DataTable za běhu. Z tabulky je vybrán jeden řádek, který DataTable se zkopíruje do cílové tabulky.
Důležité
Tato ukázka se nespustí, pokud jste nevytvořili pracovní tabulky, jak je popsáno v části Ukázková instalace hromadného kopírování. Tento kód slouží k předvedení syntaxe pouze pro použití SqlBulkCopy . Pokud jsou zdrojová a cílová tabulka ve stejné SQL Server instanci, je jednodušší a rychlejší použít příkaz jazyka Transact-SQL INSERT … SELECT
ke kopírování dat.
Poznámky
Zatímco probíhá operace hromadného kopírování, přidružený cíl SqlConnection je zaneprázdněn jeho obsluhou a s připojením nelze provádět žádné další operace.
Kolekce se ColumnMappings mapuje ze DataRow sloupců na cílovou tabulku databáze.
Platí pro
WriteToServer(DataTable)
Zkopíruje všechny řádky v zadaném DataTable objektu do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .
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)
Parametry
Výjimky
Parametr nezadal SqlBulkCopyColumnOrderHint platný název cílového sloupce.
Příklady
Následující konzolová aplikace ukazuje, jak hromadně načíst data z objektu DataTable. Cílová tabulka je tabulka v databázi AdventureWorks .
V tomto příkladu se vytvoří DataTable za běhu a je zdrojem SqlBulkCopy
operace.
Důležité
Tato ukázka se nespustí, pokud jste nevytvořili pracovní tabulky, jak je popsáno v části Ukázková instalace hromadného kopírování.
Tento kód slouží k předvedení syntaxe pouze pro použití SqlBulkCopy . Pokud jsou zdrojová a cílová tabulka ve stejné SQL Server instanci, je jednodušší a rychlejší použít příkaz jazyka Transact-SQL INSERT … SELECT
ke kopírování dat.
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;";
}
}
Poznámky
Všechny řádky v objektu DataTable se zkopírují do cílové tabulky s výjimkou těch, které byly odstraněny.
Zatímco probíhá operace hromadného kopírování, přidružený cíl SqlConnection je zaneprázdněn jeho obsluhou a s připojením nelze provádět žádné další operace.
Kolekce se ColumnMappings mapuje ze DataTable sloupců na cílovou tabulku databáze.
Viz také
Platí pro
WriteToServer(IDataReader)
Zkopíruje všechny řádky v zadaném IDataReader objektu do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .
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)
Parametry
- reader
- IDataReader
A IDataReader , jehož řádky budou zkopírovány do cílové tabulky.
Výjimky
Parametr nezadal SqlBulkCopyColumnOrderHint platný název cílového sloupce.
Příklady
Následující konzolová aplikace ukazuje, jak hromadně načíst data z objektu SqlDataReader. Cílová tabulka je tabulka v databázi AdventureWorks .
Důležité
Tato ukázka se nespustí, pokud jste nevytvořili pracovní tabulky, jak je popsáno v části Ukázková instalace hromadného kopírování. Tento kód slouží k předvedení syntaxe pouze pro použití SqlBulkCopy . Pokud jsou zdrojová a cílová tabulka ve stejné SQL Server instanci, je jednodušší a rychlejší použít příkaz jazyka Transact-SQL INSERT … SELECT
ke kopírování dat.
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;";
}
}
Poznámky
Operace kopírování začíná na dalším dostupném řádku ve čtečce. Ve většině případů se čtečka vrátila ExecuteReader() pomocí nebo podobného volání, takže další dostupný řádek je první řádek. Pokud chcete zpracovat více výsledků, zavolejte NextResult() čtečku dat a zavolejte WriteToServer znovu.
Všimněte si, že použití WriteToServer upraví stav čtenáře. Metoda bude volat Read() , dokud nevrátí hodnotu false, operace je přerušena nebo dojde k chybě. To znamená, že po dokončení operace bude čtečka dat v jiném stavu, pravděpodobně na konci sady WriteToServer výsledků dotazu.
Zatímco probíhá operace hromadného kopírování, přidružený cíl SqlConnection je zaneprázdněn jeho obsluhou a s připojením nelze provádět žádné další operace.
Kolekce se ColumnMappings mapuje ze sloupců čtečky dat na cílovou tabulku databáze.
Platí pro
WriteToServer(DataTable, DataRowState)
Zkopíruje pouze řádky, které odpovídají zadanému stavu řádku zadaného DataTable do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .
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)
Parametry
- rowState
- DataRowState
Hodnota z výčtu DataRowState . Do cíle se zkopírují pouze řádky odpovídající stavu řádku.
Výjimky
Parametr nezadal SqlBulkCopyColumnOrderHint platný název cílového sloupce.
Příklady
Následující konzolová aplikace ukazuje, jak hromadně načíst pouze řádky v objektu DataTable , které odpovídají zadanému stavu. V tomto případě se přidají jenom nezměněné řádky. Cílová tabulka je tabulka v databázi AdventureWorks .
V tomto příkladu se vytvoří DataTable za běhu a přidají se do něj tři řádky. Před spuštěním WriteToServer metody se upraví jeden z řádků.
Metoda WriteToServer je volána s argumentem DataRowState.Unchanged
rowState
, takže pouze dva nezměněné řádky jsou hromadně zkopírovány do cíle.
Důležité
Tato ukázka se nespustí, pokud jste nevytvořili pracovní tabulky, jak je popsáno v části Ukázková instalace hromadného kopírování. Tento kód slouží k předvedení syntaxe pouze pro použití SqlBulkCopy . Pokud jsou zdrojová a cílová tabulka ve stejné SQL Server instanci, je jednodušší a rychlejší použít příkaz jazyka Transact-SQL INSERT … SELECT
ke kopírování dat.
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;";
}
}
Poznámky
Do cílové tabulky se zkopírují pouze řádky v DataTable objektu , které jsou ve stavech uvedených v argumentu rowState
a nebyly odstraněny.
Poznámka
Pokud Deleted je zadána hodnota , Addedzkopírují se na server také všechny Unchangedřádky , a Modified . Nevyvolá se žádná výjimka.
Zatímco probíhá operace hromadného kopírování, přidružený cíl SqlConnection je zaneprázdněn jeho obsluhou a s připojením nelze provádět žádné další operace.
Kolekce se ColumnMappings mapuje ze DataTable sloupců na cílovou tabulku databáze.