SqlBulkCopy Konstruktory
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í
SqlBulkCopy(SqlConnection) |
Inicializuje novou instanci SqlBulkCopy třídy pomocí zadané otevřené instance .SqlConnection |
SqlBulkCopy(String) |
Inicializuje a otevře novou instanci na SqlConnection základě zadaného |
SqlBulkCopy(String, SqlBulkCopyOptions) |
Inicializuje a otevře novou instanci na SqlConnection základě zadaného |
SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) |
Inicializuje novou instanci SqlBulkCopy třídy pomocí zadané existující otevřené instance objektu SqlConnection . Instance SqlBulkCopy se chová podle možností zadaných v |
SqlBulkCopy(SqlConnection)
Inicializuje novou instanci SqlBulkCopy třídy pomocí zadané otevřené instance .SqlConnection
public:
SqlBulkCopy(Microsoft::Data::SqlClient::SqlConnection ^ connection);
public SqlBulkCopy (Microsoft.Data.SqlClient.SqlConnection connection);
new Microsoft.Data.SqlClient.SqlBulkCopy : Microsoft.Data.SqlClient.SqlConnection -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connection As SqlConnection)
Parametry
- connection
- SqlConnection
Již otevřená SqlConnection instance, která bude použita k provedení operace hromadného kopírování. Pokud váš připojovací řetězec nepoužíváIntegrated Security = true
můžete použít SqlCredential k bezpečnějšímu předávání ID uživatele a hesla než zadáním ID uživatele a hesla jako textu v připojovacím řetězci.
Příklady
Následující konzolová aplikace ukazuje, jak hromadně načíst data pomocí již otevřeného připojení. V tomto příkladu SqlDataReader se používá ke kopírování dat z tabulky Production.Product v databázi SQL Server AdventureWorks do podobné tabulky ve stejné databázi. Tento příklad slouží pouze pro demonstrační účely. K přesunu dat z jedné tabulky do jiné ve stejné databázi v produkční aplikaci byste nepoužívali SqlBulkCopy
.
Mějte na paměti, že zdrojová data nemusí být umístěna na SQL Server. Můžete použít libovolný zdroj dat, který lze načíst do objektu IDataReader nebo načíst do DataTable.
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();
// Open the destination connection. In the real world you would
// not use SqlBulkCopy to move data from one table to the other
// in the same database. This is for demonstration purposes only.
using (SqlConnection destinationConnection =
new SqlConnection(connectionString))
{
destinationConnection.Open();
// Set up the bulk copy object.
// Note that the column positions in the source
// data reader match the column positions in
// the destination table so there is no need to
// map columns.
using (SqlBulkCopy bulkCopy =
new SqlBulkCopy(destinationConnection))
{
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
Vzhledem k tomu, že připojení je již otevřeno při SqlBulkCopy inicializaci instance, zůstane otevřené i po SqlBulkCopy uzavření instance.
connection
Pokud je argument null, ArgumentNullException je vyvolán .
Platí pro
SqlBulkCopy(String)
Inicializuje a otevře novou instanci na SqlConnection základě zadanéhoconnectionString
. Konstruktor používá SqlConnection k inicializaci nové instance SqlBulkCopy třídy .
public:
SqlBulkCopy(System::String ^ connectionString);
public SqlBulkCopy (string connectionString);
new Microsoft.Data.SqlClient.SqlBulkCopy : string -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connectionString As String)
Parametry
- connectionString
- String
Řetězec definující připojení, které se otevře pro použití SqlBulkCopy instancí.
Pokud váš připojovací řetězec nepoužíváIntegrated Security = true
, můžete použít SqlBulkCopy(SqlConnection) nebo SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) a SqlCredential k bezpečnějšímu předávání ID uživatele a hesla než zadáním ID uživatele a hesla jako textu v připojovacím řetězci.
Výjimky
Pokud connectionString
je prázdný řetězec, ArgumentException je vyvolán .
Příklady
Následující konzolová aplikace ukazuje, jak hromadně načíst data pomocí připojení zadaného jako řetězec. Připojení se automaticky ukončí při zavření SqlBulkCopy instance. V tomto příkladu se zdrojová data nejprve načtou z SQL Server tabulky do SqlDataReader instance. Zdrojová data nemusí být umístěna na SQL Server. Můžete použít libovolný zdroj dat, který lze načíst do objektu IDataReader nebo načíst do DataTable.
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
Připojení se automaticky ukončí na konci operace hromadného kopírování.
Pokud connectionString
má hodnotu null, vyvolá se hodnota ArgumentNullException . Pokud connectionString
je prázdný řetězec, ArgumentException je vyvolán .
Platí pro
SqlBulkCopy(String, SqlBulkCopyOptions)
Inicializuje a otevře novou instanci na SqlConnection základě zadanéhoconnectionString
. Konstruktor používá k SqlConnection inicializaci nové instance SqlBulkCopy třídy . Instance SqlConnection se chová podle možností zadaných vcopyOptions
Parametr.
public:
SqlBulkCopy(System::String ^ connectionString, Microsoft::Data::SqlClient::SqlBulkCopyOptions copyOptions);
public SqlBulkCopy (string connectionString, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions);
new Microsoft.Data.SqlClient.SqlBulkCopy : string * Microsoft.Data.SqlClient.SqlBulkCopyOptions -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connectionString As String, copyOptions As SqlBulkCopyOptions)
Parametry
- connectionString
- String
Řetězec definující připojení, které se otevře pro použití SqlBulkCopy instancí. Pokud váš připojovací řetězec nepoužíváIntegrated Security = true
, můžete použít SqlBulkCopy(SqlConnection) nebo SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) a SqlCredential k bezpečnějšímu předávání ID uživatele a hesla než zadáním ID uživatele a hesla jako textu v připojovacím řetězci.
- copyOptions
- SqlBulkCopyOptions
Kombinace hodnot z výčtu SqlBulkCopyOptions , která určuje, které řádky zdroje dat jsou zkopírovány do cílové tabulky.
Příklady
Následující konzolová aplikace ukazuje, jak provést hromadné načtení pomocí připojení zadaného jako řetězec. Možnost je nastavená tak, aby při načítání cílové tabulky používala hodnotu ve sloupci identity zdrojové tabulky. V tomto příkladu se zdrojová data nejprve načtou z SQL Server tabulky do SqlDataReader instance. Zdrojová i cílová tabulka obsahují sloupec Identita. Ve výchozím nastavení se v cílové tabulce pro každý přidaný řádek vygeneruje nová hodnota sloupce Identita . V tomto příkladu je při otevření připojení nastavena možnost, která vynutí, aby proces hromadného načítání místo toho použil hodnoty Identity ze zdrojové tabulky. Pokud chcete zjistit, jak tato možnost mění způsob fungování hromadného načítání, spusťte ukázku s dbo. BulkCopyDemoMatchingColumns tabulka je prázdná. Všechny řádky se načítají ze zdroje. Pak znovu spusťte ukázku bez vyprázdnění tabulky. Dojde k výjimce a kód zapíše do konzoly zprávu s oznámením, že řádky nebyly přidány z důvodu porušení omezení primárního klíče.
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();
// Create the SqlBulkCopy object using a connection string
// and the KeepIdentity option.
// 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, SqlBulkCopyOptions.KeepIdentity))
{
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
Podrobné informace o všech možnostech hromadného kopírování najdete v tomto SqlBulkCopyOptions tématu.
Platí pro
SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)
Inicializuje novou instanci SqlBulkCopy třídy pomocí zadané existující otevřené instance objektu SqlConnection . Instance SqlBulkCopy se chová podle možností zadaných vcopyOptions
Parametr. Pokud je zadána hodnota, která není null SqlTransaction , budou operace kopírování provedeny v rámci této transakce.
public:
SqlBulkCopy(Microsoft::Data::SqlClient::SqlConnection ^ connection, Microsoft::Data::SqlClient::SqlBulkCopyOptions copyOptions, Microsoft::Data::SqlClient::SqlTransaction ^ externalTransaction);
public SqlBulkCopy (Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions, Microsoft.Data.SqlClient.SqlTransaction externalTransaction);
new Microsoft.Data.SqlClient.SqlBulkCopy : Microsoft.Data.SqlClient.SqlConnection * Microsoft.Data.SqlClient.SqlBulkCopyOptions * Microsoft.Data.SqlClient.SqlTransaction -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connection As SqlConnection, copyOptions As SqlBulkCopyOptions, externalTransaction As SqlTransaction)
Parametry
- connection
- SqlConnection
Již otevřená SqlConnection instance, která bude použita k provedení hromadného kopírování. Pokud váš připojovací řetězec nepoužíváIntegrated Security = true
můžete použít SqlCredential k bezpečnějšímu předávání ID uživatele a hesla než zadáním ID uživatele a hesla jako textu v připojovacím řetězci.
- copyOptions
- SqlBulkCopyOptions
Kombinace hodnot z výčtu SqlBulkCopyOptions , která určuje, které řádky zdroje dat jsou zkopírovány do cílové tabulky.
- externalTransaction
- SqlTransaction
Existující SqlTransaction instance, pod kterou bude probíhat hromadné kopírování.
Poznámky
Pokud možnosti zahrnují UseInternalTransaction
a externalTransaction
argument není null, InvalidArgumentException je vyvolána.
Příklady demonstrující použití SqlBulkCopy
v transakci naleznete v tématu Transakce a Operace hromadného kopírování.