String.Split ou Regex

Le
Cédric
Bonjour à tous,

J'aimerais pouvoir importer un script SQL (SQLite) en exécutant chaque
requête individuellement.

- Je lis le fichier SQL
- Je découpe le texte en spécifiant comme séparateur le ";"
- J'exécute chacune des requêtes

[code]
string query = File.ReadAllText("C:\script.sql");
string[] str = query.Split(';');
for (int i = 0; i < str.Length; i++) {
try {
SQLiteCommand cmd = mDbConnect.CreateCommand();
cmd.CommandText = str[i];
if (cmd.CommandText != string.Empty)
cmd.ExecuteNonQuery();
}
catch (Exception ex) {
Console.WriteLine(str[i] + ex.ToString());
}
}
[/code]

MAIS

Dans le script SQL, le ";" ne signale pas systèmatiquement la fin d'une
requête, par exemple, pour un déclencheur le code SQL est le suivant:

[code]
CREATE TRIGGER agent_commune
BEFORE INSERT ON agent
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'Impossible de trouver l''enregistrement lié')
WHERE (SELECT Num FROM Commune WHERE Num = NEW.Localite) IS NULL;
END;
[/code]

Donc il faudrait trouver autre chose pour découper le contenu du script.
J'ai essayé d'utiliser les expressions régulières (Regex) mais je n'y
arrive pas Je n'y connais rien aux expressions régulières, après
avoir lu qq sites, je suis arrivé au code suivant (qui ne fonctionne pas):

[code]
string[] str = Regex.Split(query, "[^(END;)?];");
[/code]

Quelqu'un pourrait-il m'aider ?

Merci d'avance.

Cédric.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Xavier
Le #12195301
Cédric a écrit :
.....
[code]
CREATE TRIGGER agent_commune
BEFORE INSERT ON agent
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'Impossible de trouver l''enregistrement lié')
WHERE (SELECT Num FROM Commune WHERE Num = NEW.Localite) IS NULL;
END;
[/code]





ca ne fonctionnera pas mieux , car tu peux te retrouver avec un scrit
fantaisiste comme ça :

Create Procedure Toto
@Titi int = null
as
Begin
Select @Titi
End

ou il n'y a pas de ; ni de End;

La solution est d'utilisé un parser incluant la grammaire du serveur Sq l sur
lequel tu travailles, comme ça au passage, ca te permet de vérifier l a syntaxe
du code PL/SQL de ton script.

Xavier.
Publicité
Poster une réponse
Anonyme