Passer un gros script SQL sans timeout

Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 - 29 août 2011 à 11:41
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 - 30 août 2011 à 09:46
Bonjour à tous,

Voici le contexte de mon problème :
Je développe actuellement une solution de mise à jour de base de donnée en C# (WPF) d'une version d'un logiciel vers une autre :
Le logiciel vérifie la base de donnée du client et en déduis les script à passer pour la mise à jour de son application. Les scripts sont concaténés dans un fichier SQL afin de créer un fichier de mise à jour de la base.

Voici mon besoin :
Je dois passer un gros fichier SQL (sur une base Oracle) qui a des commandes qui peuvent prendre beaucoup de temps a passer et je dois récupérer le retour d'erreur et si possible le retour des commandes. (Dans un second temps je devrais adapter mon logiciel pour que le type de base soit paramétrable Informix ou SQL Server mais ça on verras plus tard)

Voici mes pistes :
Lancer un processus "sqlplus" et passer le fichier mais cela nécessite que le client ai SQL plus d'installé (or ce n'est pas toujours le cas) j'aimerais donc éviter cette solution.

J'ai penser ensuite utiliser un provider pour éviter au client des installations (comme ODP.NET mais peut-être que vous me conseillerez mieux je suis un peut débutant en connections Oracle) et passer le contenu du fichier. Ici j'ai un risque de timeout...

J'ai pensé utiliser un provider et découper les commandes puis les passer unes par unes. (A la manière du script PHP Bigdump pour ceux qui connaissent). Ici c'est un peu complexe car les fichiers sont pas très propres. Il y a des lignes commentées avec des scripts dedans /* SELECT * FROM toto; */, des procédures etc., le parseur risque donc d'être très dure à faire.

Enfin la question :
Quelqu'un a-t-il fais quelque chose dans le style qui aurais des conseil à me donner sur une méthode à utiliser ?

Merci de votre aide,

_________________________________
Min iPomme

2 réponses

ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
29 août 2011 à 15:10
Bonjour,

Pourquoi vouloir se compliquer la vie à écrire un parser, ce qui je te l'accorde peut ne pas être simple ?

Pour passer en C# des sripts SQL sur une base, j'utilise simplement un OdbcCommand et la méthode ExecuteNonQuery. Le principe consiste à lire le fichier ligne par ligne et exécuter les commandes chaque fois qu'on rencontre un 'go'. Peu importe qu'il y ait des commentaires ou autre chose, si la commande est valide au niveau SQL ça marchera.
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 août 2011 à 09:46
Merci de ta réponse.

Les fichiers sont construit pour SQL Plus, je viens de me rendre compte qu'ils intégraient des commandes SQL Plus. Dans un premier temps je pense que je vais devoir les nettoyer de ces commandes.

Ensuite il n'y a pas de GO. Du coup je vais peut-être devoir les injecter dans les fichiers ?

Merci encore,
_________________________________
Min iPomme
0
Rejoignez-nous