.NET / Oracle: Comment exécuter un script avec des instructions DDL par programmation
Je veux faire un programmatiques schéma de manipulation à l'encontre d'une base de données oracle en C#. Donc, j'ai du mal avec certains problèmes de base.
Le ddl sql sont situés dans un fichier de script. Je ne veux pas utiliser sqlplus.exe mais je veux utiliser OracleCommand de l'ODP.NET assemblées (Système d'.Oracle.DataAccess). Voici un exemple de mon fichier de script:
script.sql:
DROP TABLE ABCDEF;
DROP TABLE GHIJKL;
Je tiens à souligner:
- Le script contient des instructions DDL (data definition language)
- Le script contient des lignes vides
- Le script contient plus qu'une seule déclaration
Le code suivant doit exécuter mon script:
var content = File.ReadAllText("script.sql");
using (var oracleConnection = new OracleConnection(_connectionString))
{
oracleConnection.Open();
using (var command = new OracleCommand(content) { Connection = oracleConnection })
{
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
}
}
L'exécution de ce code, j'obtiens une erreur oracle:
Oracle.DataAccess.Client.OracleException: ORA-00911: caractère non valide
Peut-être il ya un problème avec la mise en forme de la déclaration, je pense. Tout conseil est le bienvenue. Merci.
---EDIT---
Pour résumer mes besoins de manière simple: je recherche pour une approche d'exécuter du sql/script ddl, qui est exécutable par SQL Plus, par programmation avec C#.
OriginalL'auteur user2516186 | 2013-07-18
Vous devez vous connecter pour publier un commentaire.
@Steve a dit, les points-virgules sont la cause de votre erreur. Et on ne peut pas envelopper la totalité du fichier en une seule
execute immediate
de commande, depuis qu'ils ne peuvent exécuter une seule instruction à la fois. Vous aurez besoin d'analyser votre fichier et exécuter chaque commande sur son propre, enlever le point-virgule qui delinates commandes. Votre analyse devra composer avec des littéraux de chaîne, comme vous l'avez noté, qui en plus de contenir des points-virgules peuvent également contenir doublé guillemets (") dans les guillemets simples (') que de commencer et mettre fin à la chaîne littérale.OriginalL'auteur GriffeyDog
Simplement envelopper à l'intérieur de début et de FIN et il va fonctionner en douceur
Bien sûr, vous pouvez, c'est uniquement pour la démonstration, si!
OriginalL'auteur Anwer Matter
Je vais essayer d'exécuter une ligne à temps pour voir si vous avez un étrange personnage qui bloque l'exécution. (Je ne sais pas aussi si vous pouviez envoyer toutes vos commandes sur un seul appel).
Également vous devrait supprimer le point-virgule à la fin des lignes
Vous dites que vous avez un seul script sur plusieurs lignes? Sans reconnaissable séparateur entre les scripts? Ensuite, vous avez besoin de partager une certaine manière de vos entrées parce que je suis assez sûr que le point-virgule utilisé comme fermeture d'une seule commande, la cause de l'erreur
Je ne suis pas sûr de ce que tu veux dire avec "simple script sur plusieurs lignes". Mais je vais avoir 'create table' états qui sont plus d'une ligne. J'ai finalement besoin d'un mécanisme pour exécuter les mêmes scripts qui s'exécutent avec SQLPlus sans problèmes.
Si vous avez des "commandes" qui s'étend sur plus d'une ligne et aussi les littéraux de texte avec des points-virgules à l'intérieur des citations, alors la seule solution possible est une analyse ligne par ligne pour supprimer les points-virgules à la fin de la "commandes", mais pas ceux qui sont à l'intérieur du texte de littéraux. Pas une tâche facile et a encore besoin de vous pour passer chaque "commande" séparés. Je n'ai pas un Oracle installer pour le tester, mais, avant de commencer l'analyse, je vais essayer un simple fichier sql avec une seule commande se terminant par un point-virgule et le point-virgule juste pour vérifier la différence avec ou sans point-virgule
OriginalL'auteur Steve