SqlBulkCopy Konstruktor
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Overload
SqlBulkCopy(SqlConnection) |
Menginisialisasi instans SqlBulkCopy baru kelas menggunakan instans terbuka yang ditentukan dari SqlConnection . |
SqlBulkCopy(String) |
Menginisialisasi dan membuka instans SqlConnection baru berdasarkan yang disediakan |
SqlBulkCopy(String, SqlBulkCopyOptions) |
Menginisialisasi dan membuka instans SqlConnection baru berdasarkan yang disediakan |
SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) |
Menginisialisasi instans SqlBulkCopy baru kelas menggunakan instans terbuka yang disediakan dari SqlConnection . Instans SqlBulkCopy berulah sesuai dengan opsi yang disediakan dalam parameter |
SqlBulkCopy(SqlConnection)
Menginisialisasi instans SqlBulkCopy baru kelas menggunakan instans terbuka yang ditentukan dari 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)
Parameter
- connection
- SqlConnection
Instans yang sudah terbuka SqlConnection yang akan digunakan untuk melakukan operasi penyalinan massal. Jika string koneksi Anda tidak menggunakanIntegrated Security = true
, Anda dapat menggunakan SqlCredential untuk meneruskan ID pengguna dan kata sandi dengan lebih aman daripada dengan menentukan ID pengguna dan kata sandi sebagai teks dalam string koneksi.
Contoh
Aplikasi konsol berikut menunjukkan cara memuat data secara massal menggunakan koneksi yang sudah terbuka. Dalam contoh ini, SqlDataReader digunakan untuk menyalin data dari tabel Production.Product di database SQL Server AdventureWorks ke tabel serupa di database yang sama. Contoh tersebut adalah untuk tujuan demonstrasi. Anda tidak akan menggunakan SqlBulkCopy
untuk memindahkan data dari satu tabel ke tabel lain dalam database yang sama dalam aplikasi produksi.
Perhatikan bahwa data sumber tidak harus berada di SQL Server; Anda dapat menggunakan sumber data apa pun yang dapat dibaca ke IDataReader atau dimuat ke DataTable.
Penting
Sampel ini tidak akan berjalan kecuali Anda telah membuat tabel kerja seperti yang dijelaskan dalam Penyiapan Contoh Salinan Massal.
Kode ini disediakan untuk mendemonstrasikan sintaks untuk menggunakan SqlBulkCopy saja. Jika tabel sumber dan tujuan berada dalam instans SQL Server yang sama, lebih mudah dan lebih cepat untuk menggunakan pernyataan Transact-SQL INSERT … SELECT
untuk menyalin data.
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;";
}
}
Keterangan
Karena koneksi sudah terbuka ketika SqlBulkCopy instans diinisialisasi, koneksi tetap terbuka setelah SqlBulkCopy instans ditutup.
connection
Jika argumen null, maka ArgumentNullException akan dilemparkan.
Berlaku untuk
SqlBulkCopy(String)
Menginisialisasi dan membuka instans SqlConnection baru berdasarkan yang disediakanconnectionString
. Konstruktor menggunakan untuk menginisialisasi instans SqlConnectionSqlBulkCopy baru kelas.
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)
Parameter
- connectionString
- String
String yang menentukan koneksi yang akan dibuka untuk digunakan oleh SqlBulkCopy instans.
Jika string koneksi Anda tidak menggunakanIntegrated Security = true
, Anda dapat menggunakan SqlBulkCopy(SqlConnection) atau SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) dan SqlCredential untuk meneruskan ID pengguna dan kata sandi dengan lebih aman daripada dengan menentukan ID pengguna dan kata sandi sebagai teks dalam string koneksi.
Pengecualian
Jika connectionString
adalah string kosong, akan ArgumentException dilemparkan.
Contoh
Aplikasi konsol berikut menunjukkan cara memuat data secara massal dengan menggunakan koneksi yang ditentukan sebagai string. Koneksi ditutup secara otomatis saat SqlBulkCopy instans ditutup. Dalam contoh ini, data sumber pertama kali dibaca dari tabel SQL Server ke SqlDataReader instans. Data sumber tidak harus berada di SQL Server; Anda dapat menggunakan sumber data apa pun yang dapat dibaca ke IDataReader atau dimuat ke DataTable.
Penting
Sampel ini tidak akan berjalan kecuali Anda telah membuat tabel kerja seperti yang dijelaskan dalam Penyiapan Contoh Salinan Massal.
Kode ini disediakan untuk mendemonstrasikan sintaks untuk menggunakan SqlBulkCopy saja. Jika tabel sumber dan tujuan berada dalam instans SQL Server yang sama, lebih mudah dan lebih cepat untuk menggunakan pernyataan Transact-SQL INSERT … SELECT
untuk menyalin data.
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;";
}
}
Keterangan
Koneksi secara otomatis ditutup di akhir operasi penyalinan massal.
Jika connectionString
null, akan ArgumentNullException dilemparkan. Jika connectionString
adalah string kosong, akan ArgumentException dilemparkan.
Berlaku untuk
SqlBulkCopy(String, SqlBulkCopyOptions)
Menginisialisasi dan membuka instans SqlConnection baru berdasarkan yang disediakanconnectionString
. Konstruktor menggunakannya SqlConnection untuk menginisialisasi instans SqlBulkCopy baru kelas. Instans SqlConnection berulah sesuai dengan opsi yang disediakan dalam parameter copyOptions
.
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)
Parameter
- connectionString
- String
String yang menentukan koneksi yang akan dibuka untuk digunakan oleh SqlBulkCopy instans. Jika string koneksi Anda tidak menggunakanIntegrated Security = true
, Anda dapat menggunakan SqlBulkCopy(SqlConnection) atau SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) dan SqlCredential untuk meneruskan ID pengguna dan kata sandi dengan lebih aman daripada dengan menentukan ID pengguna dan kata sandi sebagai teks dalam string koneksi.
- copyOptions
- SqlBulkCopyOptions
Kombinasi nilai dari SqlBulkCopyOptions enumerasi yang menentukan baris sumber data mana yang disalin ke tabel tujuan.
Contoh
Aplikasi konsol berikut menunjukkan cara melakukan pemuatan massal dengan menggunakan koneksi yang ditentukan sebagai string. Opsi diatur untuk menggunakan nilai di kolom identitas tabel sumber saat Anda memuat tabel tujuan. Dalam contoh ini, data sumber pertama kali dibaca dari tabel SQL Server ke SqlDataReader instans. Tabel sumber dan tabel tujuan masing-masing menyertakan kolom Identitas. Secara default, nilai baru untuk kolom Identitas dihasilkan dalam tabel tujuan untuk setiap baris yang ditambahkan. Dalam contoh ini, opsi diatur saat koneksi dibuka yang memaksa proses pemuatan massal untuk menggunakan nilai Identitas dari tabel sumber sebagai gantinya. Untuk melihat bagaimana opsi mengubah cara kerja beban massal, jalankan sampel dengan dbo. Tabel BulkCopyDemoMatchingColumns kosong. Semua baris dimuat dari sumber. Kemudian jalankan sampel lagi tanpa mengosongkan tabel. Pengecualian dilemparkan dan kode menulis pesan ke konsol yang memberi tahu Anda bahwa baris tidak ditambahkan karena pelanggaran batasan kunci primer.
Penting
Sampel ini tidak akan berjalan kecuali Anda telah membuat tabel kerja seperti yang dijelaskan dalam Penyiapan Contoh Salinan Massal. Kode ini disediakan untuk mendemonstrasikan sintaks untuk menggunakan SqlBulkCopy saja. Jika tabel sumber dan tujuan berada dalam instans SQL Server yang sama, lebih mudah dan lebih cepat untuk menggunakan pernyataan Transact-SQL INSERT … SELECT
untuk menyalin data.
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;";
}
}
Keterangan
Anda dapat memperoleh informasi terperinci tentang semua opsi penyalinan massal dalam topik ini SqlBulkCopyOptions .
Berlaku untuk
SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)
Menginisialisasi instans SqlBulkCopy baru kelas menggunakan instans terbuka yang disediakan dari SqlConnection . Instans SqlBulkCopy berulah sesuai dengan opsi yang disediakan dalam parameter copyOptions
. Jika non-null SqlTransaction disediakan, operasi salin akan dilakukan dalam transaksi tersebut.
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)
Parameter
- connection
- SqlConnection
Instans yang sudah terbuka SqlConnection yang akan digunakan untuk melakukan salinan massal. Jika string koneksi Anda tidak menggunakanIntegrated Security = true
, Anda dapat menggunakan SqlCredential untuk meneruskan ID pengguna dan kata sandi dengan lebih aman daripada dengan menentukan ID pengguna dan kata sandi sebagai teks dalam string koneksi.
- copyOptions
- SqlBulkCopyOptions
Kombinasi nilai dari SqlBulkCopyOptions enumerasi yang menentukan baris sumber data mana yang disalin ke tabel tujuan.
- externalTransaction
- SqlTransaction
Instans yang ada SqlTransaction di mana salinan massal akan terjadi.
Keterangan
Jika opsi menyertakan UseInternalTransaction
dan externalTransaction
argumen tidak null, InvalidArgumentException akan dilemparkan.
Untuk contoh yang menunjukkan cara menggunakan SqlBulkCopy
dalam transaksi, lihat Operasi Transaksi dan Salin Massal.