Comment importer correctement des colonnes Excel dont le texte intégral est activé à l'aide de Microsoft.ACE.OLEDB et de SqlBulkCopy

c# excel oledb sqlbulkcopy sql-server

Question

J'importe des lignes d'une feuille Excel dans une table de serveur SQL à l'aide d'une insertion en bloc. Le texte intégral est activé dans certaines colonnes de la source Excel et pose certains problèmes.

Si vous avez dit "texte enveloppé (1)" et "texte enveloppé (2)", ils apparaîtront comme ci-dessous dans la cellule Excel.

wrapped text (1) 
wrapped text (2)

Le problème que je reçois est, lorsque cette ligne est importée dans SQL Server, elles apparaîtront comme ci-dessous

wrapped text (1)wrapped text (2)//Note that there is no space between the two texts

Je souhaiterais qu'ils apparaissent comme ci-dessous

 wrapped text (1) wrapped text (2)//note the space between them

Ci-dessous, la paix du code que j'utilise pour l'importation

 public static void insertdata1(string strexcelConnectionString, string strcommand, string strsqlConnectionString, string strtrunsqlQuery, string strtablename)
    {
        using (OleDbConnection connection = new OleDbConnection(strexcelConnectionString))
        {
            connection.Open();
            OleDbCommand command = new OleDbCommand(strcommand, connection);
            //truncate the table before inserting new data.
            SqlConnection cnntrunc = new SqlConnection(strsqlConnectionString);
            //open the connection.
            cnntrunc.Open();
            //begin the transaction.
            SqlTransaction myTrans = cnntrunc.BeginTransaction();//New a transaction                        
            SqlCommand truntble = new SqlCommand();
            truntble.Transaction = myTrans;
            truntble.Connection = cnntrunc;
            try
            {
                //Create DbDataReader to Data Worksheet.
                using (DbDataReader dr = command.ExecuteReader())
                {                     
                    //Bulk Copy to SQL Server.
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(strsqlConnectionString))
                    {
                        bulkCopy.DestinationTableName = strtablename;
                        bulkCopy.WriteToServer(dr);
                    }
                    //commit the transaction.
                    myTrans.Commit();
                }
            }
            catch (OleDbException ex)
            {
               //my error handling code here
            }
            catch (InvalidOperationException ex)
            {
                myTrans.Rollback();
                //more logging here
                throw ex;
            }
            finally
            {
                cnntrunc.Close();
            }
        }
    }

Et coup est ma chaîne de connexion excel

strexcelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(strfilename) + "; Extended Properties=\"Excel 12.0 XML;HDR=YES;IMEX=1;\"";

Réponse acceptée

Après mon BulkInsert, je mets à jour mes colonnes problématiques comme décrit ici. Comment vérifier mes données dans SQL Server avec retour à la ligne et saut de ligne?



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi