SqlBulkCopy Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Permite cargar de forma eficaz una tabla SQL Server de forma masiva con datos de otro origen.
public ref class SqlBulkCopy sealed : IDisposable
public sealed class SqlBulkCopy : IDisposable
type SqlBulkCopy = class
interface IDisposable
Public NotInheritable Class SqlBulkCopy
Implements IDisposable
- Herencia
-
SqlBulkCopy
- Implementaciones
Ejemplos
La aplicación de consola siguiente muestra cómo cargar datos mediante la clase SqlBulkCopy. En este ejemplo se usa SqlDataReader para copiar datos de la tabla Production.Product de la base de datos AdventureWorks de SQL Server en una tabla similar de la misma base de datos.
Importante
Este ejemplo no se ejecutará a menos que haya creado las tablas de trabajo como se describe en Configuración de ejemplo de copia masiva.
Este código se proporciona para mostrar la sintaxis para usar SqlBulkCopy. Si las tablas de origen y destino están en la misma instancia de SQL Server, es más fácil y rápido usar una instrucción Transact-SQL INSERT … SELECT para copiar los datos.
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;";
}
}
Comentarios
Microsoft SQL Server incluye una popular utilidad de símbolo del sistema denominada bcp para mover datos de una tabla a otra, ya sea en un solo servidor o entre servidores. La SqlBulkCopy clase le permite escribir soluciones de código administrado que proporcionan una funcionalidad similar. Hay otras maneras de cargar datos en una tabla de SQL Server (las instrucciones INSERT, por ejemplo), pero SqlBulkCopy ofrece una importante ventaja de rendimiento sobre ellas. La clase SqlBulkCopy puede usarse para escribir datos solo en tablas de SQL Server. Sin embargo, el origen de datos no se limita a SQL Server; se puede usar cualquier origen de datos, siempre y cuando los datos se puedan cargar en una instancia de DataTable o leer con una instancia de IDataReader. SqlBulkCopy producirá un error al cargar de forma masiva una columna de DataTable de tipo SqlDateTime en una columna de SQL Server cuyo tipo sea uno de los tipos de fecha y hora agregados en SQL Server 2008.
Constructores
| Nombre | Description |
|---|---|
| SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) |
Inicializa una nueva instancia de la SqlBulkCopy clase utilizando la instancia abierta existente proporcionada de SqlConnection. La SqlBulkCopy instancia se comporta según las opciones proporcionadas en el |
| SqlBulkCopy(SqlConnection) |
Inicializa una instancia nueva de la clase SqlBulkCopy mediante la instancia abierta especificada de SqlConnection. |
| SqlBulkCopy(String, SqlBulkCopyOptions) |
Inicializa y abre una instancia nueva de SqlConnection en función del valor |
| SqlBulkCopy(String) |
Inicializa y abre una instancia nueva de SqlConnection en función del valor |
Propiedades
| Nombre | Description |
|---|---|
| BatchSize |
Número de filas en cada lote. Al final de cada lote, las filas del lote se envían al servidor. |
| BulkCopyTimeout |
Número de segundos para que se complete la operación antes de que se agote el tiempo de espera. |
| ColumnMappings |
Devuelve una colección de SqlBulkCopyColumnMapping elementos. Las asignaciones de columnas definen las relaciones entre las columnas del origen de datos y las columnas en el destino. |
| ColumnOrderHints |
Devuelve una colección de SqlBulkCopyColumnOrderHint elementos. Las sugerencias de orden de columna describen el criterio de ordenación de las columnas en el índice agrupado de la tabla de destino. |
| DestinationTableName |
Nombre de la tabla de destino en el servidor. |
| EnableStreaming |
Habilita o deshabilita un SqlBulkCopy objeto para transmitir datos desde un IDataReader objeto |
| NotifyAfter |
Define el número de filas que se van a procesar antes de generar un evento de notificación. |
| RowsCopied |
Número de filas procesadas en la operación de copia masiva en curso. |
| RowsCopied64 |
Número de filas procesadas en la operación de copia masiva en curso. |
Métodos
| Nombre | Description |
|---|---|
| ClearCachedMetadata() |
Borra los metadatos de la tabla de destino almacenados en caché al usar la CacheMetadata opción . |
| Close() |
Cierra la instancia de SqlBulkCopy. |
| WriteToServer(DataRow[]) |
Copia todas las filas de la matriz proporcionada DataRow en una tabla de destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . |
| WriteToServer(DataTable, DataRowState) |
Copia solo las filas que coinciden con el estado de fila proporcionado en la tabla de destino especificada DataTable por la DestinationTableName propiedad del SqlBulkCopy objeto . |
| WriteToServer(DataTable) |
Copia todas las filas del objeto DataTable proporcionado en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy. |
| WriteToServer(DbDataReader) |
Copia todas las filas de la matriz proporcionada DbDataReader en una tabla de destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . |
| WriteToServer(IDataReader) |
Copia todas las filas del objeto IDataReader proporcionado en una tabla de destino especificada por la propiedad DestinationTableName del objeto SqlBulkCopy. |
| WriteToServerAsync(DataRow[], CancellationToken) |
La versión asincrónica de WriteToServer(DataRow[]), que copia todas las filas de la matriz proporcionada DataRow en una tabla de destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . El token de cancelación se puede usar para solicitar que la operación se abandone antes de que transcurre el tiempo de espera del comando. Las excepciones se notificarán a través del objeto Task devuelto. |
| WriteToServerAsync(DataRow[]) |
La versión asincrónica de WriteToServer(DataRow[]), que copia todas las filas de la matriz proporcionada DataRow en una tabla de destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . |
| WriteToServerAsync(DataTable, CancellationToken) |
La versión asincrónica de WriteToServer(DataTable), que copia todas las filas de la tabla de destino proporcionadas DataTable en una tabla de destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . El token de cancelación se puede usar para solicitar que la operación se abandone antes de que transcurre el tiempo de espera del comando. Las excepciones se notificarán a través del objeto Task devuelto. |
| WriteToServerAsync(DataTable, DataRowState, CancellationToken) |
La versión asincrónica de WriteToServer(DataTable, DataRowState), que copia solo las filas que coinciden con el estado de fila proporcionado en la tabla de DataTable destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . El token de cancelación se puede usar para solicitar que la operación se abandone antes de que transcurre el tiempo de espera del comando. Las excepciones se notificarán a través del objeto Task devuelto. |
| WriteToServerAsync(DataTable, DataRowState) |
La versión asincrónica de WriteToServer(DataTable, DataRowState), que copia solo las filas que coinciden con el estado de fila proporcionado en la tabla de DataTable destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . |
| WriteToServerAsync(DataTable) |
La versión asincrónica de WriteToServer(DataTable), que copia todas las filas de la tabla de destino proporcionadas DataTable en una tabla de destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . |
| WriteToServerAsync(DbDataReader, CancellationToken) |
La versión asincrónica de WriteToServer(DbDataReader), que copia todas las filas de la matriz proporcionada DbDataReader en una tabla de destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . El token de cancelación se puede usar para solicitar que la operación se abandone antes de que transcurre el tiempo de espera del comando. Las excepciones se notificarán a través del objeto Task devuelto. |
| WriteToServerAsync(DbDataReader) |
La versión asincrónica de WriteToServer(IDataReader), que copia todas las filas de la tabla de destino proporcionadas IDataReader en una tabla de destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . |
| WriteToServerAsync(IDataReader, CancellationToken) |
La versión asincrónica de WriteToServer(IDataReader), que copia todas las filas de la tabla de destino proporcionadas IDataReader en una tabla de destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . El token de cancelación se puede usar para solicitar que la operación se abandone antes de que transcurre el tiempo de espera del comando. Las excepciones se notificarán a través del objeto Task devuelto. |
| WriteToServerAsync(IDataReader) |
La versión asincrónica de WriteToServer(IDataReader), que copia todas las filas de la tabla de destino proporcionadas IDataReader en una tabla de destino especificada por la DestinationTableName propiedad del SqlBulkCopy objeto . |
Eventos
| Nombre | Description |
|---|---|
| SqlRowsCopied |
Se produce cada vez que se ha procesado el número de filas especificadas por la NotifyAfter propiedad . |
Implementaciones de interfaz explícitas
| Nombre | Description |
|---|---|
| IDisposable.Dispose() |
Libera todos los recursos usados por la instancia actual de la SqlBulkCopy clase . |