Asp.net: Télécharger un fichier Excel à l'aide de blkCopy et ajouter une colonne définie par l'utilisateur

asp.net c# database sql sqlbulkcopy

Question

Pour le moment, mon programme télécharge un fichier Excel via le navigateur sur le serveur. Ce fichier excel est alors en cours de lecture sur le serveur et sa valeur est placée dans une base de données. Le problème que je cherche à résoudre est que je souhaite ajouter une colonne supplémentaire, mais que celle-ci soit définie par l'utilisateur à partir du navigateur et que je ne vois aucun moyen de le faire car j'utilise bulkCopy.

Ce que je veux faire permet à l’utilisateur d’ajouter du texte dans une zone de texte telle que MAR12 ou APR12, puis de télécharger le fichier Excel et de l’ajouter dans chaque colonne remplie par le fichier Excel. Quelqu'un peut-il m'aider avec une solution. Merci

string tableRows= "SELECT [id],[DateEntered],[User_ID] FROM [EPG$]";          

string EPGTableName = "tableName";               table in the database

C'est ici que le fichier Excel est copié dans la base de données:

        using (OleDbConnection connection = new OleDbConnection(connStr))
        {
            OleDbCommand command = new OleDbCommand(tableRows, connection);

            connection.Open();
            // Create DbDataReader to Data Worksheet
            using (DbDataReader dr = command.ExecuteReader())
            {
                // SQL Server Connection String
                string sqlConnectionString = "SERVER=<server>;UID=schafc;Trusted_Connection=Yes;DATABASE=<database>;";

                // Bulk Copy to SQL Server
                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
                {
                    bulkCopy.DestinationTableName = tableName;
                    bulkCopy.WriteToServer(dr);
                }
            }
        }

Réponse populaire

Je ne suis pas sûr de savoir comment procéder avec un DataReader, mais cela peut être fait à l'aide d'un DataAdapter et d'un DataTable. Remplir la table, ajouter une colonne (avec une valeur par défaut), puis transmettre la table à la copie en bloc plutôt qu’à un datareader.

using (OleDbDataAdapter adapter = new OleDbDataAdapter(tableRows, connStr))
{
    DataTable table = new DataTable();
    adapter.Fill(table);
    table.Columns.Add(new DataColumn("@ColumnName", typeof(string), string.Format("'{0}'", textboxvalue)));
    // SQL Server Connection String
    string sqlConnectionString = "SERVER=<server>;UID=schafc;Trusted_Connection=Yes;DATABASE=<database>;";

    // Bulk Copy to SQL Server
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
    {
        bulkCopy.DestinationTableName = tableName;
        bulkCopy.WriteToServer(table);
    }
}


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