J'ai une feuille Excel avec plusieurs onglets, j'ai besoin d'insérer ces données dans SQL Server en utilisant C #

asp.net c# sqlbulkcopy sql-server

Question

J'ai un fichier Excel qui contient plusieurs feuilles. Chaque nom de feuille est identique à un nom de table dans SQL Server. Je dois insérer les données de ces feuilles Excel dans les tableaux respectifs de la base de données.

Il y a 13 onglets et 13 tables dans la base de données du serveur SQL.

Je peux insérer les données d'une feuille dans une table avec le code ci-dessous.

String strConnection = "Data Source=.;Initial Catalog=<>;Integrated Security=True";

String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath);

// Create Connection to Excel work book 
OleDbConnection conn = new OleDbConnection(excelConnString);

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;

OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();

conn.Open();
DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string sheetName = dtSheet.Rows[0]["table_name"].ToString();
cmd.CommandText = "select * from [" + sheetName + "]";
da.SelectCommand = cmd;
da.Fill(dt);

using (OleDbDataReader dReader = cmd.ExecuteReader())
{
    using(SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
    {
        //Give your Destination table name 
        sqlBulk.DestinationTableName = "TABLE NAME IN SQL";
        sqlBulk.WriteToServer(dReader);

        conn.Close();
    }
}

Comment puis-je insérer les données de toutes les feuilles?

Réponse acceptée

Ce qui suit devrait le faire - il vous suffit de parcourir chaque ligne du tableau:

    ...
    DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

    // iterate each sheet
    foreach (System.Data.DataRow sheet in dtSheet.Rows)
    {
        string sheetName = sheet["table_name"].ToString();
        cmd.CommandText = "select * from [" + sheetName + "]";
        da.SelectCommand = cmd;
        da.Fill(dt);

        using (OleDbDataReader dReader = cmd.ExecuteReader())
        {
            using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
            {
                // Give your Destination table name.  Table name is sheet name minus any $
                sqlBulk.DestinationTableName = sheetName.Replace("$", "");
                sqlBulk.WriteToServer(dReader);

                conn.Close();
            }
        }
    }
}


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