2 votes

Affichage de lignes supplémentaires dans la base de données après l'importation vers SQL Server

Je suis en train de construire un programme qui a besoin des caractéristiques suivantes :

  • Importer un fichier Excel dans une base de données -- Vérification
  • Éviter les doublons --- y travailler
  • Ignorer certaines lignes qui se trouvent dans l'en-tête du fichier Excel et en bas --- c'est ce que je veux vous demander.

Voici mon code

protected void Upload_Click(object sender, EventArgs e)
{
    string excelPath = Server.MapPath("~/Nova pasta/") + Path.GetFileName(FileUpload1.PostedFile.FileName);

    string filepath = Server.MapPath("~/Nova pasta/") + Path.GetFileName(FileUpload1.FileName);
    string filename = Path.GetFileName(filepath);

    FileUpload1.SaveAs(excelPath);

    string strConnection = @"Data Source=PEDRO-PC\SQLEXPRESS;Initial Catalog=costumizado;Persist Security Info=True;User ID=sa;Password=1234";
    string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO,IMEX=1;\"";

    OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
    excelConnection.Open();

    DataTable schema = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    string sheetName = schema.Rows[0]["TABLE_NAME"].ToString();

    OleDbCommand cmd = new OleDbCommand("Select * from [" + sheetName + "]", excelConnection);
    OleDbDataReader dReader;
    dReader = cmd.ExecuteReader();

    using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
    {
        sqlBulk.ColumnMappings.Add(0,0);
        sqlBulk.ColumnMappings.Add(1,1);
        sqlBulk.ColumnMappings.Add(2,2);
        sqlBulk.ColumnMappings.Add(3,3);
        sqlBulk.DestinationTableName = "Dados";

        sqlBulk.WriteToServer(dReader);
    }

    excelConnection.Close();
}

Et ce qui me pose problème, c'est que j'ai besoin que mon code trouve les colonnes dans l'excel et ignore les lignes dont je n'ai pas besoin....

Je pensais que ces lignes étaient suffisantes pour le travail :

sqlBulk.ColumnMappings.Add(0,0);
sqlBulk.ColumnMappings.Add(1,1);
sqlBulk.ColumnMappings.Add(2,2);
sqlBulk.ColumnMappings.Add(3,3);
sqlBulk.DestinationTableName = "Dados";

Voici le tableau que je souhaite importer :

Excel tables

0voto

superztnt Points 51

La gestion des fichiers sources fluctuants est délicate. Essayez peut-être de charger l'ensemble du fichier dans une table brute, puis, après avoir chargé la table, appelez un processus pour déplacer uniquement les colonnes qui correspondent à une ligne complète dans votre table de production ou votre table finale. Par exemple, ne sélectionnez que les données brutes où Data Mov, Data Valor, Descricao do Movimento, et Valor em EUR ne sont pas nulles. Si nécessaire, vous pouvez ajouter plus de validation, comme vérifier les deux premières colonnes pour le format de la date et la dernière colonne pour une valeur numérique. Je pense simplement qu'il est plus facile de le faire en SQL qu'en code .NET.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X