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

Accès aux données Discussion :

[ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?


Sujet :

Accès aux données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 43
    Points : 19
    Points
    19
    Par défaut [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Bonjour!

    Je souhaiterai savoir s'il est possible de copier les données d'une table dans une autre table, déjà créée sur une autre base de données.

    Merci d'avance pour vos réponses!

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Re: [VB.NET]Copie de données entre deux tables sur BD différ
    Citation Envoyé par maddog2032
    ... s'il est possible de ....
    oui c'est possible


    Select d'un côté et Insert de l'autre
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Salut!

    C'est un peu ce que je pensais...

    Mais aurais tu un exemple de requête?
    Le point que je ne comprend pas vraiment c'est comment faire le lien direct entre une bd et une autre dans la même requête. Est ce que tu peux m'expliquer please?

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par maddog2032
    Salut!

    C'est un peu ce que je pensais...

    Mais aurais tu un exemple de requête?
    Le point que je ne comprend pas vraiment c'est comment faire le lien direct entre une bd et une autre dans la même requête. Est ce que tu peux m'expliquer please?
    Justement çà ne peut pas être une m^me requ^te
    Je te renvoie aux tutoriaux concernant les bdd
    Tu comprends bien que :
    1. récupérer des valeurs
    2. insérer des valeurs
    sont bien 2 transactions distinctes
    le principe est donc sûrement:
    1. Creer une connection1 pour BDD1, creer une commande1 type SELECT, creer un lecteur1
    2. Ouvrir connection1
    3. Executer commande1 en attribuant le resultat à lecteur1
    4. Fermer connection1
    5. Creer une connection2 pour BDD2, creer une commande2 type INSERT à partir des valeurs de lecteur1
    6. Ouvrir connection2
    7. Executer commande2
    8. Fermer connection2
    Le code dépendra précisement du type de tes bases de données
    par exemple pour sqlserver .Net possèdes des classes toutes faites pour les objets cités ci-dessus
    http://msdn.microsoft.com/library/fr...asqlclient.asp

    neguib

    PS: bien sûr j'ai supposé que tu voulais faire celà en code par ton application vb; une autre solution serait de le faire faire par ta BDD1 si elle a accès à BDD2 en créant une procédure stockée capable de réaliser les 2 requêtes mais là tu n'est pas vraiment dans le bon forum
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Déjà, merci pour ton aide !
    Je vais tout de suite suivre le lien que tu m'a donné!

    Ca me rassure de voir qu j'ai bien fait! Mon prog correspond au schema que tu m'a énoncé.
    Les petits truc qui m'ont fait me demandé si j'avançais dans le bon sens sont tout les tests que j'ai mis en place à chaque débug (un peu bricolage j'avoue, mais je fais avec ce que je connais )

    Voilà mon code : (si ça te di de jeter un coup d'oeil )

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
            Dim i As Integer = 0
            Dim strCnxSrc As String = "Data Source=localhost; Integrated
     Security=SSPI; Initial Catalog=" & TxtBoxBdSrc.Text
            Dim strCnxFnl As String = "Data Source=localhost; Integrated
     Security=SSPI; Initial Catalog=" & TxtBoxBdFnl.Text
            Dim strRequete As String = "SELECT * FROM " & TxtBoxTblSrc.Text
            Dim RqtCreatTbl 'As String = ""
            Dim RqtFillTbl 'As String = ""
            Dim RqtRmpTbl 'As String = ""
            Dim tmpRqtRmpTbl 'As String = ""
            Dim RowNbr As Double = 0
     
     
            Try
                Dim CnxSrc As New SqlConnection(strCnxSrc)
                Dim CmdSrc As New SqlCommand(strRequete, CnxSrc)
                CnxSrc.Open()
                Dim RdrSrc As SqlDataReader = CmdSrc.ExecuteReader()
                Dim schema As Data.DataTable = RdrSrc.GetSchemaTable
     
                'Elaboration de la requête pour créer la table de sauvegarde
     suivant la structurede la table initiale
                RqtCreatTbl = "CREATE TABLE " & TxtBoxTblFnl.Text & " ("
                RqtFillTbl = "INSERT INTO " & TxtBoxTblFnl.Text & " ("
                For Each myRow As Data.DataRow In schema.Rows
                    For Each myCol As Data.DataColumn In schema.Columns
                        If myCol.ColumnName = "ColumnSize" Then
                            RqtCreatTbl += myRow(0) & " " &
     RdrSrc.GetDataTypeName(i).ToUpper
                            If RdrSrc.GetDataTypeName(i).ToUpper <> "SMALLINT"
     And RdrSrc.GetDataTypeName(i).ToUpper <> "TINYINT" And
     RdrSrc.GetDataTypeName(i).ToUpper <> "DATETIME" And
     RdrSrc.GetDataTypeName(i).ToUpper <> "NTEXT" And
     RdrSrc.GetDataTypeName(i).ToUpper <> "IMAGE" And 
     RdrSrc.GetDataTypeName(i).ToUpper <> "INT" And
     RdrSrc.GetDataTypeName(i).ToUpper <> "MONEY" And
     RdrSrc.GetDataTypeName(i).ToUpper <> "BIT" And
     RdrSrc.GetDataTypeName(i).ToUpper <> "UNIQUEIDENTIFIER" Then
                                RqtCreatTbl += "(" & myRow(2) & ")"
                            End If
                            i += 1
                            RqtCreatTbl += ","
                        End If
                    Next
                Next
                RqtCreatTbl = Mid(RqtCreatTbl, 1, Len(RqtCreatTbl) - 1) & ")"
     
                Label1.Text = "Creation de " & TxtBoxBdFnl.Text & " / " &
     TxtBoxTblFnl.Text & " à partir de " & TxtBoxBdSrc.Text & " / " &
     TxtBoxTblSrc.Text
                TextBox2.Text = RqtCreatTbl
     
     
     
                'Creation de la requête de remplissage de la nouvelle table
                RqtRmpTbl = "INSERT INTO " & TxtBoxTblFnl.Text & " VALUES ("
                i = 0
                Do While RdrSrc.Read()
                    Do While i < RdrSrc.FieldCount
                        'Dim testvar = RdrSrc.GetDataTypeName(i).ToUpper
                        If RdrSrc.GetDataTypeName(i).ToUpper <> "MONEY" And
     RdrSrc.GetDataTypeName(i).ToUpper <> "BIT" Then
                            RqtRmpTbl += "'" & Replace(RdrSrc.Item(i).ToString, "'",
     "''") & "',"
                        Else
                            If RdrSrc.GetDataTypeName(i).ToUpper = "BIT" Then
                                'Dim tmpverif As String = RdrSrc.Item(i).ToString
                                If RdrSrc.Item(i).ToString = "0" Or RdrSrc.Item
    (i).ToString = "NULL" Or RdrSrc.Item(i).ToString = "" Or RdrSrc.Item
    (i).ToString = "False" Then
                                    RqtRmpTbl += "0,"
                                Else
                                    RqtRmpTbl += "1,"
                                End If
                            Else
                                RqtRmpTbl += Replace(Replace(RdrSrc.Item
    (i).ToString, ",", "."), "'", "''") & ","
                            End If
                        End If
                        i += 1
                    Loop
                    i = 0
                    RqtRmpTbl = Mid(RqtRmpTbl, 1, Len(RqtRmpTbl) - 1) & ")
     *+*+*+* INSERT INTO " & TxtBoxTblFnl.Text & " VALUES ("
                    RowNbr += 1
                Loop
                RdrSrc.Close()
                CnxSrc.Close()
     
     
                'Création de la table sur la deuxième base de données
                Dim CnxFnl As New SqlConnection(strCnxFnl)
                Dim CmdFnl As New SqlCommand(RqtCreatTbl, CnxFnl)
     
                CnxFnl.Open()
                Dim RdrFnl As SqlDataReader = CmdFnl.ExecuteReader()
                RdrFnl.Close()
     
                TextBox1.Text = RqtRmpTbl
     
                'Remplissage de la nouvelle table
                Dim Target As String = "*+*+*+*"
     
                Do While i < RowNbr
                    tmpRqtRmpTbl = Mid(RqtRmpTbl, 1, InStr(RqtRmpTbl, Target) -
     1)
                    RqtRmpTbl = Mid(RqtRmpTbl, InStr(RqtRmpTbl, Target) + 8,
     RqtRmpTbl.Length)
                    Dim CmdRmp As New SqlCommand(tmpRqtRmpTbl, CnxFnl)
                    Dim RdrRmp As SqlDataReader = CmdRmp.ExecuteReader()
                    RdrRmp.Close()
                    i += 1
                Loop
                i = 0
     
                CnxFnl.Close()
     
                MsgBox("La copie de la table s'est bien déroulée.")
     
            Catch e As Exception
                MsgBox("L'erreur suivante a été rencontrée :" & Chr(13) & Chr
    (13) & e.Message)
            End Try

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    j'avoue que j'ai parcouru en diagonal ton code
    et tablant sur le fait qur tu sais lire je te fais confiance pour l'implementation si une erreur survient alors tu peux compter sur moi
    j'ai juste en passant quelque petite remarques
    1. Quand tu declare un string pour une requete je te conseille quelquechose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim requete as string = string.empty
    ' plutot que dim requete as string =""
    'sinon ne mets rien c plus simple
    2. ton try catch j'ai pas bien vu peut également contenir un Finally
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try
    catch ex as exceptio
    finally
     'ici fermer tout ce qui a à fermer quelquesoit ce qui se passe
     If not(MaConnection Is Nothing) Then MaConnection .Close
    end try
    3. pourquoi ne pas déclarer toutes tes requêtes au départ comme des constantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Const maRequete1 as string = "SELECT * FROM ? WHERE"
     
    ' de façon complète ou partielle quitte à utiliser replace pour la compléter
     dynamiquement
    Bon a+ si necessaire
    n'oublie pas de mettre le tag Resolu
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Ok! Merci pour tes conseils! Je vais arranger tout ça et me replonger dans le flou artistique 8)

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/05/2012, 22h07
  2. Réponses: 2
    Dernier message: 17/03/2009, 11h03
  3. copier des données entre deux table access (vb2005)
    Par solid_sneak06 dans le forum VB.NET
    Réponses: 9
    Dernier message: 12/07/2008, 13h20
  4. Comment transférer des données entre deux JFrame
    Par speos dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 23/04/2007, 15h50
  5. Réponses: 3
    Dernier message: 01/12/2006, 20h31

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