SqlBulkCopy Konstruktorer
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Initierar en ny instans av SqlBulkCopy klassen.
Överlagringar
| Name | Description |
|---|---|
| SqlBulkCopy(SqlConnection) |
Initierar en ny instans av SqlBulkCopy klassen med den angivna öppna instansen av SqlConnection. |
| SqlBulkCopy(String) |
Initierar och öppnar en ny instans av SqlConnection baserat på den angivna |
| SqlBulkCopy(String, SqlBulkCopyOptions) |
Initierar och öppnar en ny instans av SqlConnection baserat på den angivna |
| SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) |
Initierar en ny instans av SqlBulkCopy klassen med den angivna befintliga öppna instansen av SqlConnection. Instansen SqlBulkCopy fungerar enligt de alternativ som anges i parametern |
SqlBulkCopy(SqlConnection)
Initierar en ny instans av SqlBulkCopy klassen med den angivna öppna instansen av SqlConnection.
public:
SqlBulkCopy(System::Data::SqlClient::SqlConnection ^ connection);
public SqlBulkCopy(System.Data.SqlClient.SqlConnection connection);
new System.Data.SqlClient.SqlBulkCopy : System.Data.SqlClient.SqlConnection -> System.Data.SqlClient.SqlBulkCopy
Public Sub New (connection As SqlConnection)
Parametrar
- connection
- SqlConnection
Den redan öppna SqlConnection instansen som ska användas för att utföra masskopieringsåtgärden. Om din reťazec pripojenia inte använder Integrated Security = true kan du använda SqlCredential för att skicka användar-ID och lösenord säkrare än genom att ange användar-ID och lösenord som text i reťazec pripojenia.
Exempel
Följande konsolprogram visar hur du massinläser data med hjälp av en anslutning som redan är öppen. I det här exemplet används en SqlDataReader för att kopiera data från tabellen Production.Product i SQL Server AdventureWorks-databasen till en liknande tabell i samma databas. Det här exemplet är endast i demonstrationssyfte. Du skulle inte använda SqlBulkCopy för att flytta data från en tabell till en annan i samma databas i ett produktionsprogram. Observera att källdata inte behöver finnas på SQL Server. Du kan använda alla datakällor som kan läsas till en IDataReader eller läsas in på en DataTable.
Important
Det här exemplet körs inte om du inte har skapat arbetstabellerna enligt beskrivningen i Inställning för masskopieringsexempel. Den här koden tillhandahålls för att demonstrera syntaxen för att endast använda SqlBulkCopy . Om käll- och måltabellerna finns i samma SQL Server instans är det enklare och snabbare att använda en Transact-SQL INSERT ... SELECT-instruktion för att kopiera data.
using System.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;";
}
}
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connectionString As String = GetConnectionString()
' Open a connection to the AdventureWorks database.
Using sourceConnection As SqlConnection = _
New SqlConnection(connectionString)
sourceConnection.Open()
' Perform an initial count on the destination table.
Dim commandRowCount As New SqlCommand( _
"SELECT COUNT(*) FROM dbo.BulkCopyDemoMatchingColumns;", _
sourceConnection)
Dim countStart As Long = _
System.Convert.ToInt32(commandRowCount.ExecuteScalar())
Console.WriteLine("Starting row count = {0}", countStart)
' Get data from the source table as a SqlDataReader.
Dim commandSourceData As New SqlCommand( _
"SELECT ProductID, Name, ProductNumber " & _
"FROM Production.Product;", sourceConnection)
Dim reader As SqlDataReader = 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 destinationConnection As SqlConnection = _
New SqlConnection(connectionString)
destinationConnection.Open()
' Set up the bulk copy object.
' 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 bulkCopy As SqlBulkCopy = _
New SqlBulkCopy(destinationConnection)
bulkCopy.DestinationTableName = _
"dbo.BulkCopyDemoMatchingColumns"
Try
' Write from the source to the destination.
bulkCopy.WriteToServer(reader)
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
' Close the SqlDataReader. The SqlBulkCopy
' object is automatically closed at the end
' of the Using block.
reader.Close()
End Try
End Using
' Perform a final count on the destination table
' to see how many rows were added.
Dim countEnd As Long = _
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()
End Using
End Using
End Sub
Private Function GetConnectionString() As String
' 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;"
End Function
End Module
Kommentarer
Eftersom anslutningen redan är öppen när instansen SqlBulkCopy initieras förblir anslutningen öppen när instansen SqlBulkCopy har stängts.
Om argumentet connection är null genereras en ArgumentNullException .
Se även
Gäller för
SqlBulkCopy(String)
Initierar och öppnar en ny instans av SqlConnection baserat på den angivna connectionString. Konstruktorn använder SqlConnection för att initiera en ny instans av SqlBulkCopy klassen.
public:
SqlBulkCopy(System::String ^ connectionString);
public SqlBulkCopy(string connectionString);
new System.Data.SqlClient.SqlBulkCopy : string -> System.Data.SqlClient.SqlBulkCopy
Public Sub New (connectionString As String)
Parametrar
- connectionString
- String
Strängen som definierar den anslutning som ska öppnas för användning av instansen SqlBulkCopy . Om din reťazec pripojenia inte använder Integrated Security = true kan du använda SqlBulkCopy(SqlConnection) eller SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) och SqlCredential för att skicka användar-ID och lösenord säkrare än genom att ange användar-ID och lösenord som text i reťazec pripojenia.
Exempel
Följande konsolprogram visar hur du massinläser data med hjälp av en anslutning som anges som en sträng. Anslutningen stängs automatiskt när instansen SqlBulkCopy stängs.
I det här exemplet läss källdata först från en SQL Server-tabell till en SqlDataReader-instans. Källdata behöver inte finnas på SQL Server. Du kan använda alla datakällor som kan läsas till en IDataReader eller läsas in på en DataTable.
Important
Det här exemplet körs inte om du inte har skapat arbetstabellerna enligt beskrivningen i Inställning för masskopieringsexempel. Den här koden tillhandahålls för att demonstrera syntaxen för att endast använda SqlBulkCopy . Om käll- och måltabellerna finns i samma SQL Server instans är det enklare och snabbare att använda en Transact-SQL INSERT ... SELECT-instruktion för att kopiera data.
using System.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;";
}
}
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connectionString As String = GetConnectionString()
' Open a connection to the AdventureWorks database.
Using sourceConnection As SqlConnection = _
New SqlConnection(connectionString)
sourceConnection.Open()
' Perform an initial count on the destination table.
Dim commandRowCount As New SqlCommand( _
"SELECT COUNT(*) FROM dbo.BulkCopyDemoMatchingColumns;", _
sourceConnection)
Dim countStart As Long = _
System.Convert.ToInt32(commandRowCount.ExecuteScalar())
Console.WriteLine("Starting row count = {0}", countStart)
' Get data from the source table as a SqlDataReader.
Dim commandSourceData As SqlCommand = New SqlCommand( _
"SELECT ProductID, Name, ProductNumber " & _
"FROM Production.Product;", sourceConnection)
Dim reader As SqlDataReader = 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 bulkCopy As SqlBulkCopy = New SqlBulkCopy(connectionString)
bulkCopy.DestinationTableName = _
"dbo.BulkCopyDemoMatchingColumns"
Try
' Write from the source to the destination.
bulkCopy.WriteToServer(reader)
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
' Close the SqlDataReader. The SqlBulkCopy
' object is automatically closed at the end
' of the Using block.
reader.Close()
End Try
End Using
' Perform a final count on the destination table
' to see how many rows were added.
Dim countEnd As Long = _
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()
End Using
End Sub
Private Function GetConnectionString() As String
' 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;"
End Function
End Module
Kommentarer
Anslutningen stängs automatiskt i slutet av masskopieringsåtgärden.
Om connectionString är null genereras en ArgumentNullException . Om connectionString är en tom sträng genereras en ArgumentException .
Se även
Gäller för
SqlBulkCopy(String, SqlBulkCopyOptions)
Initierar och öppnar en ny instans av SqlConnection baserat på den angivna connectionString. Konstruktorn använder den för att SqlConnection initiera en ny instans av SqlBulkCopy klassen. Instansen SqlConnection fungerar enligt de alternativ som anges i parametern copyOptions .
public:
SqlBulkCopy(System::String ^ connectionString, System::Data::SqlClient::SqlBulkCopyOptions copyOptions);
public SqlBulkCopy(string connectionString, System.Data.SqlClient.SqlBulkCopyOptions copyOptions);
new System.Data.SqlClient.SqlBulkCopy : string * System.Data.SqlClient.SqlBulkCopyOptions -> System.Data.SqlClient.SqlBulkCopy
Public Sub New (connectionString As String, copyOptions As SqlBulkCopyOptions)
Parametrar
- connectionString
- String
Strängen som definierar den anslutning som ska öppnas för användning av instansen SqlBulkCopy . Om din reťazec pripojenia inte använder Integrated Security = true kan du använda SqlBulkCopy(SqlConnection) eller SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) och SqlCredential för att skicka användar-ID och lösenord säkrare än genom att ange användar-ID och lösenord som text i reťazec pripojenia.
- copyOptions
- SqlBulkCopyOptions
En kombination av värden från SqlBulkCopyOptions uppräkningen som avgör vilka datakällans rader som kopieras till måltabellen.
Exempel
Följande konsolprogram visar hur du utför en massinläsning med hjälp av en anslutning som anges som en sträng. Ett alternativ är inställt på att använda värdet i identitetskolumnen i källtabellen när du läser in måltabellen. I det här exemplet läss källdata först från en SQL Server-tabell till en SqlDataReader-instans. Källtabellen och måltabellen innehåller var och en en identitetskolumn. Som standard genereras ett nytt värde för identitetskolumnen i måltabellen för varje rad som läggs till. I det här exemplet anges ett alternativ när anslutningen öppnas som tvingar massinläsningsprocessen att använda identitetsvärdena från källtabellen i stället. Om du vill se hur alternativet ändrar hur massinläsningen fungerar kör du exemplet med dbo. BulkCopyDemoMatchingColumns-tabellen är tom. Alla rader läses in från källan. Kör sedan exemplet igen utan att tömma tabellen. Ett undantag utlöses och koden skriver ett meddelande till konsolen som meddelar dig att rader inte har lagts till på grund av överträdelser av primärnyckelbegränsningar.
Important
Det här exemplet körs inte om du inte har skapat arbetstabellerna enligt beskrivningen i Inställning för masskopieringsexempel. Den här koden tillhandahålls för att demonstrera syntaxen för att endast använda SqlBulkCopy . Om käll- och måltabellerna finns i samma SQL Server instans är det enklare och snabbare att använda en Transact-SQL INSERT ... SELECT-instruktion för att kopiera data.
using System.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;";
}
}
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connectionString As String = GetConnectionString()
' Open a connection to the AdventureWorks database.
Using sourceConnection As SqlConnection = _
New SqlConnection(connectionString)
sourceConnection.Open()
' Perform an initial count on the destination table.
Dim commandRowCount As New SqlCommand( _
"SELECT COUNT(*) FROM dbo.BulkCopyDemoMatchingColumns;", _
sourceConnection)
Dim countStart As Long = _
System.Convert.ToInt32(commandRowCount.ExecuteScalar())
Console.WriteLine("Starting row count = {0}", countStart)
' Get data from the source table as a SqlDataReader.
Dim commandSourceData As SqlCommand = New SqlCommand( _
"SELECT ProductID, Name, ProductNumber " & _
"FROM Production.Product;", sourceConnection)
Dim reader As SqlDataReader = 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 bulkCopy As SqlBulkCopy = _
New SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity)
bulkCopy.DestinationTableName = "dbo.BulkCopyDemoMatchingColumns"
Try
' Write from the source to the destination.
bulkCopy.WriteToServer(reader)
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
' Close the SqlDataReader. The SqlBulkCopy
' object is automatically closed at the end
' of the Using block.
reader.Close()
End Try
End Using
' Perform a final count on the destination table
' to see how many rows were added.
Dim countEnd As Long = _
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()
End Using
End Sub
Private Function GetConnectionString() As String
' 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;"
End Function
End Module
Kommentarer
Du kan få detaljerad information om alla alternativ för masskopiering i ämnet SqlBulkCopyOptions .
Se även
Gäller för
SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)
Initierar en ny instans av SqlBulkCopy klassen med den angivna befintliga öppna instansen av SqlConnection. Instansen SqlBulkCopy fungerar enligt de alternativ som anges i parametern copyOptions . Om en icke-null SqlTransaction anges utförs kopieringsåtgärderna inom transaktionen.
public:
SqlBulkCopy(System::Data::SqlClient::SqlConnection ^ connection, System::Data::SqlClient::SqlBulkCopyOptions copyOptions, System::Data::SqlClient::SqlTransaction ^ externalTransaction);
public SqlBulkCopy(System.Data.SqlClient.SqlConnection connection, System.Data.SqlClient.SqlBulkCopyOptions copyOptions, System.Data.SqlClient.SqlTransaction externalTransaction);
new System.Data.SqlClient.SqlBulkCopy : System.Data.SqlClient.SqlConnection * System.Data.SqlClient.SqlBulkCopyOptions * System.Data.SqlClient.SqlTransaction -> System.Data.SqlClient.SqlBulkCopy
Public Sub New (connection As SqlConnection, copyOptions As SqlBulkCopyOptions, externalTransaction As SqlTransaction)
Parametrar
- connection
- SqlConnection
Den redan öppna SqlConnection instansen som ska användas för att utföra masskopian. Om din reťazec pripojenia inte använder Integrated Security = true kan du använda SqlCredential för att skicka användar-ID och lösenord säkrare än genom att ange användar-ID och lösenord som text i reťazec pripojenia.
- copyOptions
- SqlBulkCopyOptions
En kombination av värden från SqlBulkCopyOptions uppräkningen som avgör vilka datakällans rader som kopieras till måltabellen.
- externalTransaction
- SqlTransaction
En befintlig SqlTransaction instans där masskopian sker.
Kommentarer
Om alternativen inkluderar UseInternalTransaction och externalTransaction argumentet inte är null genereras en InvalidArgumentException .
Exempel som visar hur du använder SqlBulkCopy i en transaktion finns i Transaktions- och masskopieringsåtgärder.