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

C# Discussion :

Copie de données de DB Express vers Sql Server


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Août 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 16
    Par défaut Copie de données de DB Express vers Sql Server
    J'ai le scénario suivant :

    Je dois copier une table d'une base de donnée Express 2005 vers une autre table dans un base de donnée SQL Server 2008.

    Dois-je faire ça à l'arraché. En créant par exemple un thread qui récupe avec un grand select les valeurs de la table, et en insère dans l'autre base de donnée avec un simple update ? Ou existe-t-il une meilleur méthode que SQL Server offre ?

    Merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il me semble que c'est plutôt une question sur SQL Server que sur C#...

    Celà dit, voilà une solution C# (c'est un peu bourrin, mais ça devrait passer si la quantité de données n'est pas trop énorme...) :

    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
     
    DataTable table = new DataTable();
    string query = "SELECT * FROM LA_TABLE";
     
    // Lecture
    using (SqlConnection cnxSource = new SqlConnection(connectionStringSource))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(query, cnxSource);
        adapter.AcceptChangesDuringFill = false;
        adapterSource.Fill(table);
    }
     
    // Ecriture
    using (SqlConnection cnxDestination = new SqlConnection(connectionStringDestination))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(query, cnxDestination);
        SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
        adapter.Update(table);
    }

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Pourquoi pas en passant par SqlBulkCopy ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Membre averti
    Inscrit en
    Août 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 16
    Par défaut
    Désolé d'avoir pris du temps...!

    Donc, pour résumer, j'ai pas mal cherché les solutions qui s'offraient à moi. J'ai même pensé à utiliser Sql Server Integration Service (anciennement connu sous le nom de DTS).

    Citation Envoyé par tomlev Voir le message
    Il me semble que c'est plutôt une question sur SQL Server que sur C#...
    Celà dit, voilà une solution C# (c'est un peu bourrin, mais ça devrait passer si la quantité de données n'est pas trop énorme...) :
    Wé, j'ai pensé à ça en premier, et je peux t'avouer que jusqu'à maintenant, c'est la solution qui me paraît la plus optimale...

    Citation Envoyé par SaumonAgile Voir le message
    Pourquoi pas en passant par SqlBulkCopy ?
    Est-ce que tu peux m'en dire un peu plus sur cette fonctionnalité ?

  5. #5
    Membre averti
    Inscrit en
    Août 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 16
    Par défaut
    Je viens de lire cet article, qui parle de SqlBulkCopy, et j'ai l'impression que ma solution se trouve dedans...

    http://www.sqlteam.com/article/use-s...-to-sql-server

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Par défaut
    Bonjour, je me permet de rebondir sur ce post plutôt que d'en ouvrir un autre.

    Je dois mettre à jour une base locale à partir d'une base centrale (sql server 2005 et sql server 2005 express).

    J'utilise pour cela SqlBulkCopy.

    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
    SqlConnection local = new SqlConnection(locCnxString);
                SqlConnection server = new SqlConnection(srvCnxString);
     
                local.Open();
                server.Open();
     
                SqlCommand com = new SqlCommand("ps_s_ASS_ANA_Sync", server);
                com.CommandType = CommandType.StoredProcedure;
                com.Parameters.Add("@listeDiff", SqlDbType.NVarChar).Value = listeDiff;
                SqlDataReader reader = com.ExecuteReader();
     
                // using SqlDataReader to copy the rows:
                while(reader.Read())
                {
                    SqlBulkCopy s = new SqlBulkCopy(local);
                    s.DestinationTableName = "ASS_ANA";
                    //s.NotifyAfter = 10000;
                    //s.SqlRowsCopied += new SqlRowsCopiedEventHandler(s_SqlRowsCopied);
                    s.WriteToServer(reader);
                    s.Close();
                }
     
                // close connections:
                server.Close();
                local.Close();
    Mon problème est que la copie n'est pas complète. Ma procédure stockée (ps_s_ASS_ANA_Sync) me ramène 14 lignes mais le BulkCopy ne m'écrit que les 7 dernières.
    Je n'arrive pas à voir pourquoi. Auriez-vous une idée ?

    Nh'ésitez pas à me demander si vous voulez plus d'infos.

    par avance merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. données migrées de Access vers SQL server
    Par philou22 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 09/05/2012, 12h20
  2. Réponses: 4
    Dernier message: 09/06/2011, 11h48
  3. exportation de données de ms project vers sql server
    Par maryyem dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/07/2009, 11h46
  4. Problème données VS 2008 Express et SQL server Express
    Par Contrec dans le forum Visual Studio
    Réponses: 7
    Dernier message: 20/10/2008, 19h13
  5. Réponses: 3
    Dernier message: 15/10/2008, 09h24

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