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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 433 fois - Téléchargée 29 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
cs_polgornek Messages postés 5 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 6 octobre 2007
28 avril 2006 à 10:00
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 ;-)
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
27 avril 2006 à 17:33
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 :)

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.