Générer dynamiquement une table à partir d'un fichier délimité

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 156 fois - Téléchargée 27 fois

Contenu du snippet

Bonjour,
en travaillant les lots DTS SQLserver2000 via VB.net, j'ai cherché comment créer dynamiquement ma table qui changeait à chaque appel avant d'importer des données depuis un fichier texte/délimité.
Voila le bout de code qui en résulte. En espérant que ce sera utile à Qqun.

Source / Exemple :


Private Sub createTableFromFile()
        Try
'le chemin vers mon fichier
            Dim stFile as string = "D:\monFichier.txt"
            Dim oSr As New StreamReader(stFile)
            Dim stTitles As String = oSr.ReadLine
            oSr.Close()
            'je récupere la premiere ligne du fichier
            Dim Titles() As String = Split(stTitles, ",")
            'on supprime la table si nécessaire
            Dim stQuery As String = "IF EXISTS(SELECT name  FROM sysobjects WHERE  name = 'MaTable' AND type = 'U')" &  vbCrLf & "DROP TABLE MaTable"
            Dim oCmdDrop As New SqlClient.SqlCommand
            With oCmdDrop
                .CommandText = stQuery
                .Connection = Me.SqlConnection1
            End With
            Me.SqlConnection1.Open()
            oCmdDrop.ExecuteNonQuery()
            Me.SqlConnection1.Close()
            'je cree la requete create table proprement dit
            Dim i As Int16 = 0
            stQuery = "CREATE TABLE MaTable ("
            While i < Titles.Length
                stQuery = stQuery & "[" & Titles(i) & "]" & " varchar(255)"
                If i < Titles.Length - 1 Then stQuery = stQuery & "," & vbCrLf
                i += 1
            End While
            stQuery = stQuery & ")"

            Dim oCmd As New SqlClient.SqlCommand
            With oCmd
                .CommandText = stQuery
                .Connection = Me.SqlConnection1
            End With
            Me.SqlConnection1.Open()
            oCmd.ExecuteNonQuery()
            Me.SqlConnection1.Close()
        Catch ex As Exception
            MessageBox.Show("error while creating MaTable " & vbCrLf & ex.GetType.ToString & vbCrLf & ex.Message)
        End Try
    End Sub

Conclusion :


ensuite je lance mon lot DTS (avec DTS.Package2).
Voila, sans prétention et à adapter, mais si ça peut rendre service ;-)

A voir également

Ajouter un commentaire

Commentaires

olixelle
Messages postés
520
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
3 mars 2008
1 -
ya un truc qui serait terrible, c'est que tu analyses le contenu des champs du fichier pour ne pas mettre du varchar(255) à chaque fois :)
cs_polgornek
Messages postés
5
Date d'inscription
mercredi 5 novembre 2003
Statut
Membre
Dernière intervention
6 octobre 2007
-
Tu as raison, c'est pas top optimisé. En fait il a été un peu fait à l'arrache, et comme je l'ai indiqué "sans prétention et à adapter", mais je le modifierai dès que possible pour tenir compte de te remarque très juste ;-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.