SqlBulkCopy no puede acceder a la tabla

c# database sqlbulkcopy sql-server

Pregunta

Después de leer una hoja de Excel (para transferir la tabla), quiero agregar esos datos a una nueva tabla (tabla de destino) usando SqlBulkCopy, pero recibo el error:

Cannot access destination table 'test'

He intentado usar el nombre de tabla predeterminado y usar corchetes, pero eso no funcionó.

¿Alguna sugerencia?

private void writeToDBButton_Click(object sender, EventArgs e) {
    MakeTable();
    destinationTable.TableName = "test";
    testDBDataSet.Tables.Add("test");

    // Connects to the sql-server using Connection.cs
    SqlConnection connection = Connection.GetConnection();

    using (connection) {
        connection.Open();

        // Uses SqlBulkCopy to copy the data from our transferTable to the destinationTable
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) {
            bulkCopy.DestinationTableName = destinationTable.TableName;

            try {
                // Write from the source to the destination.
                bulkCopy.WriteToServer(transferTable);
                this.dataGridView2.DataSource = destinationTable;
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }

            connection.Close();
        }
    }
}

private void saveDBButton_Click(object sender, EventArgs e) {
    this.Validate();
    this.usersBindingSource.EndEdit();
    this.tableAdapterManager.UpdateAll(this.testDBDataSet);
}


private void MakeTable() {
    for (int counter = 0; counter < columns; counter++) {
        DataColumn dummy = new DataColumn();
        dummy.DataType = System.Type.GetType("System.Double");
        destinationTable.Columns.Add(dummy);
    }
}

Respuesta aceptada

Compruebe que el usuario que se conecta a db tiene

GRANT ALTER ON [dbo].[TABLE_XXX] TO [appuser] 

como se sugiere en la respuesta de Jhilden en el foro de MSDN .


Respuesta popular

Mi problema era un poco diferente, resulta que el nombre de mi tabla era una palabra clave reservada en SQL, así que tuve que hacer lo siguiente:

bulkCopy.DestinationTableName = $"{schema}.[{tableName}]";

Donde schema es el esquema de destino y tableName el nombre de la tabla de destino

De la documentación

DestinationTableName es un nombre de tres partes [base de datos]. [Owningschema]. [Nombre]. Puede calificar el nombre de la tabla con su base de datos y esquema de propiedad si lo desea. Sin embargo, si el nombre de la tabla utiliza un guión bajo ("_") o cualquier otro carácter especial, debe escapar del nombre utilizando los corchetes circundantes como en ([base de datos]. [Owningschema]. [Name_01])



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é