Insérer un datagrid autrement que ligne a ligne. appli pro.

aitoz Messages postés 59 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 30 décembre 2008 - 7 févr. 2005 à 11:20
aitoz Messages postés 59 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 30 décembre 2008 - 7 févr. 2005 à 11:24
Bonjour,

Pour faire simple. Je recois un fichier texte d'un client avec des lignes de commandes.
Ce fichier contient donc ligne a ligne les articles a livrer. Chaque information est séparé par un point virgule ;

dans mon appli, j'ouvre le fichier et je place dans un DatTable les données colonne par colonne.

Ensuite j'ouvre une connexion a ma base de données et j'ajoute les lignes dans la table des commande (en gros )

Le probleme est que ma méthode fonctionne lentement. en effet, j'ajoute ligne a ligne avec une requete INSERT, et franchement c'est lent. Est ce que quelqu'un aurait une methode pour ajouter tout d'un bloc ou pour acceder plus rapidement a la base.

Voici la partie de mon code qui ajoute :

ProgressBar1.Maximum =
CInt(DataTable1.Rows.Count.ToString)


For y = 0
To
CInt(DataTable1.Rows.Count.ToString) - 1


OleDbCommand1.CommandText = "INSERT INTO IMPORT_ECOSIT (IE_BATI, IE_CODE, IE_CLIE, IE_SELF, IE_NBAC, IE_STAT, IE_QBAC, IE_CCLI, IE_OPER, IE_PORT, IE_DSAI, IE_HSAI) VALUES"_


& " ('" & DataTable1.Rows(y).Item(0) _
& "' ,'" & DataTable1.Rows(y).Item(1) _
& "' ,'" & (DataTable1.Rows(y).Item(2)) _
& "' ,'" & (DataTable1.Rows(y).Item(3)) _
& "' ," &
CInt((DataTable1.Rows(y).Item(4))) _
& " ,'" & (DataTable1.Rows(y).Item(5)) _
& "' ,'" & (DataTable1.Rows(y).Item(6)) _
& "' ," &
CInt(DataTable1.Rows(y).Item(7)) _
& " ,'" & DataTable1.Rows(y).Item(8) _
& "' ,'" & DataTable1.Rows(y).Item(9) _
& "' ,#" &
CDate(Microsoft.VisualBasic.Left(DataTable1.Rows(y).Item(10), 2) & "/" & Mid(DataTable1.Rows(y).Item(10), 3, 2) & "/" & Microsoft.VisualBasic.Right(DataTable1.Rows(y).Item(10), 4)) _
& "# ,#" &
CDate(Microsoft.VisualBasic.Left(DataTable1.Rows(y).Item(11), 2) & ":" & Mid(DataTable1.Rows(y).Item(11), 3, 2) & ":" & Microsoft.VisualBasic.Right(DataTable1.Rows(y).Item(11), 2)) _
& "#)"


OleDbCommand1.Connection = OleDbConnection1
OleDbCommand1.Connection.Open()
OleDbCommand1.ExecuteNonQuery()
OleDbCommand1.Connection.Close()


ProgressBar1.Value = ProgressBar1.Value + 1



Next y


ProgressBar1.Visible =
False

et franchement je regarde ma progress bar avancer tout doucement ! ouhhh c'est long !

merci pour votre aide.
ciao

1 réponse

aitoz Messages postés 59 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 30 décembre 2008 1
7 févr. 2005 à 11:24
Mort de rire.

En recopiant mon code dans le premier message du forum j'ai trouvé la solution.

Il semble évident qu'il est necessaire d'ouvrir la connexion qu'une seule fois et de la fermer une seule fois !

Bon ! et bien merci quand meme.

ps : une épine de moins dans le pied
Rejoignez-nous