Excel a SQL. Alternativa a BulkCopy?

c# sql sqlbulkcopy

Pregunta

Tengo un fragmento de código que copia los datos de una hoja de cálculo de Excel a una tabla MSSQL utilizando DataReader y SqlBulkCopy. Funcionó bien hasta que creé una clave principal en la tabla y ahora falla. Primero estoy eliminando el contenido de la tabla SQL antes de llenarlo nuevamente con los datos de Excel.

Como solo muevo una pequeña cantidad de datos, me pregunto si habría una mejor manera de hacerlo que utilizando BulkCopy.

Actualización: a continuación se muestra el código relativo y el error que recibí es: "El valor dado del tipo Cadena del origen de datos no se puede convertir al tipo flotante de la columna de destino especificada".

using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                connection.Open();
                OleDbCommand cmd = new OleDbCommand
                ("SELECT Name, Date, Amount FROM ExcelNamedRange", connection);

                using (OleDbDataReader dr = cmd.ExecuteReader())
                {
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
                    {
                        bulkCopy.DestinationTableName = "SqlTable";
                        bulkCopy.WriteToServer(dr);

                    }
                }                 
            }

Respuesta aceptada

SqlBulkCopy asigna automáticamente los campos. Pero como agregó una clave principal, la asignación predeterminada ya no es válida.

Tendrá que configurar ColumnMapping para indicar a su objeto SqlBulkCopy explícitamente cómo asignar los campos.

Haga esto para todos sus campos, excepto la clave principal (suponiendo que utilice una identidad en la PK).

Por ejemplo:

_bulkCopyEngine.ColumnMappings.Add("fieldname_from", "fieldname_to");

Respuesta popular

Al crear una clave principal, sugiere que está aplicando una restricción de dominio (algo bueno).

Por lo tanto, su problema real no es que necesite otra forma de realizar la inserción masiva, sino que necesita averiguar por qué tiene claves duplicadas (la razón precisa para aplicar la PK).



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué