Problemi di trigger SqlBulkCopy e SQL Server

asp.net c# sqlbulkcopy sql-server

Domanda

Ho il codice seguente nella mia domanda. Io uso SqlBulkCopy per caricare i dati di Excel in una tabella di SQL Server. Ora, ho un innesco su quel tavolo. Ho cambiato il mio codice esistente come questo, ma sto ricevendo un errore.

L'errore è

Argomento 1: impossibile convertire da "System.Data.SqlClient.SqlConnection" a "string"

Ho cambiato il codice come

oSqlBulk = new SqlBulkCopy("cn", SqlBulkCopyOptions.FireTriggers);

Quindi ricevo un errore

Il formato della stringa di inizializzazione non è conforme alle specifiche a partire dall'indice 0.

Si prega di controllare il mio codice:

public static string ExecuteBulkCopy(string connectionString, string TableName, string Paths)
{
    SqlBulkCopy oSqlBulk = null;
    string error = null;

    OleDbConnection myExcelConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; " +
                       "Data Source=" + Paths +
                       ";Extended Properties=Excel 12.0;");

    try
    {
        myExcelConn.Open();

        // GET DATA FROM EXCEL SHEET.
        OleDbCommand objOleDB = new OleDbCommand("SELECT *FROM [Sheet1$]", myExcelConn);

        // READ THE DATA EXTRACTED FROM THE EXCEL FILE.
        OleDbDataReader objBulkReader = null;
        objBulkReader = objOleDB.ExecuteReader();

        using (SqlConnection cn = new SqlConnection(connectionString))
        {
            // cn.Open();
            oSqlBulk = new SqlBulkCopy(cn,SqlBulkCopyOptions.FireTriggers);

            oSqlBulk.DestinationTableName = TableName; // TABLE NAME.
            oSqlBulk.WriteToServer(objBulkReader);
            // return 1;

            //call the overload that takes a connection in place of the connection string
            // return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
        }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    finally
    {
        oSqlBulk.Close();
        oSqlBulk = null;
        myExcelConn.Close();
        myExcelConn = null;
    }

    return error;
}

Risposta accettata

Se si controllano i costruttori validi per SqlBulkCopy: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.sqlbulkcopy(v=vs.110).aspx

Si noterà che il sovraccarico che utilizza SqlBulkCopyOptions non accetta direttamente SqlConnection. Solo il ConnectionString

Poiché SqlBulkCopy implementa IDisposable

È necessario sostituire interamente SqlConnection:

using (var oSqlBulk = new SqlBulkCopy(connectionString,SqlBulkCopyOptions.FireTriggers))
{
    oSqlBulk.DestinationTableName = TableName; 
    oSqlBulk.WriteToServer(objBulkReader);
}

Risposta popolare

Ho fatto le seguenti modifiche. Funziona ora

 using (SqlConnection cn = new SqlConnection(connectionString))
                {

                    cn.Open();
                    oSqlBulk = new SqlBulkCopy(connectionString,SqlBulkCopyOptions.FireTriggers);


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow