IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Import CSV vers SQL en C#


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Dirigeant d'entreprise
    Inscrit en
    Août 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Dirigeant d'entreprise

    Informations forums :
    Inscription : Août 2014
    Messages : 3
    Par défaut Import CSV vers SQL en C#
    Bonjour,

    Je suis coincé avec mon importateur CSV que j'essaie de programmer.

    J'ai trouvé un tuto sur un site, mais je coince à l'adapter à mon besoin.

    J'ai un CSV avec différents champs, chaque colonne ayant une en tête.

    Je veux charger ce CSV dans ma base SQL pour ça j'ai donc un streamreader qui me découpe mon CSV en DataTable

    ensuite la méthode préconisée dans le tuto c'est un Bulkcopy.

    Le seul problème c'est que je n'arrive pas à trouver d'infos sur le fonctionnement de cette méthode et qu'elle renvoie des erreurs pas très explicites.

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    public ActionResult Importcsv()
            {
                return View();
            }
     
            [HttpPost]
            public ActionResult Importcsv(HttpPostedFileBase FileUpload)
            {
                DataTable dt = new DataTable();
     
                if (FileUpload.ContentLength > 0)
                {
                    string fileName = Path.GetFileName(FileUpload.FileName);
                    string path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
                    try
                    {
                        FileUpload.SaveAs(path);
                        dt = ProcessCSV(path);
                        ViewData["Feedback"] = ProcessBulkCopy(dt);
     
                    }
                    catch (Exception ex)
                    {
                        ViewData["Feedback"] = ex.Message;
                    }
     
                }
                else
                {
                    ViewData["Feedback"] = "Sélectionnez un fichier";
                }
                dt.Dispose();
     
                return View("Importcsv", ViewData["Feedback"]);
            }
     
     private static String ProcessBulkCopy(DataTable dt)
            {
                string Feedback = string.Empty;
                string connString = ConfigurationManager.ConnectionStrings["BagatellesDBContext"].ConnectionString;
                using (SqlConnection conn = new SqlConnection(connString))
                {
                    conn.Open();
                    using (var copy = new SqlBulkCopy(conn))
                    {
                        copy.DestinationTableName = "Articles";
     
                        copy.BatchSize = dt.Rows.Count;
                        try
                        {
                            copy.WriteToServer(dt);
                            Feedback = "Chargement effectué";
                        }
                        catch (Exception ex)
                        {
                            Feedback = ex.Message;
                        }
                    }
     
                    return Feedback;
                }

    et voici l'erreur renvoyée lors du chargement du CSV:

    Impossible de convertir la valeur de type String fournie pour la source de données en type int de la colonne cible spécifiée.

    La seul colonne qui puisse être concernée est ma colonne de prix.

    Faut-il exclure l'en-tête du bulkcopy pour éviter des erreurs de cast?

    Mis dans ce cas comment faire pour qu'il injecte les données dans les bonnes cases sachant que mon CSV ne contient pas toutes les colonnes de ma base, et pas forcément dans le même ordre en plus.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 243
    Par défaut
    Je ne connais pas cette fonction Bulkcopy, mais si j'en crois MSDN, dans le cas ou tu n'as pas le même nombre de colonne entre la source et la destination, ou que ces colonnes ne sont pas dans le même ordre, il te faut obligatoirement définir la propriété ColumnMappings de ton bulk avec le mappage de tes colonnes sources sur celles de destination.

    http://msdn.microsoft.com/fr-fr/libr...vs.110%29.aspx
    http://msdn.microsoft.com/fr-fr/libr...vs.110%29.aspx
    http://msdn.microsoft.com/fr-fr/libr...vs.110%29.aspx

Discussions similaires

  1. Import CSV vers SQL
    Par JulienM28 dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 08/08/2014, 15h11
  2. Import xls vers sql en php
    Par Warfdog dans le forum Langage
    Réponses: 7
    Dernier message: 16/04/2010, 20h42
  3. importation csv vers PostgreSQL access denied
    Par rc_29 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 09/10/2008, 11h13
  4. Importation xml vers sql server
    Par nicko5959 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/01/2006, 09h06
  5. Importation CSV vers base de données
    Par Brice Yao dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/06/2005, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo