Problemme d'export de tables oracle 10g en c# [Résolu]

Signaler
Messages postés
21
Date d'inscription
mardi 8 mars 2011
Statut
Membre
Dernière intervention
13 juin 2011
-
Messages postés
21
Date d'inscription
mardi 8 mars 2011
Statut
Membre
Dernière intervention
13 juin 2011
-
bonjour,
je travaille sur un projet de fin d'etude dont une application sert d'import et export des tables,tablespaces...etc,d'une base de donnees oracle 10g.
j'ai reussi d'exporter des tables en fichiers(.dmp) avec l'outil sqlplus d'oracle ,mais quand je met la meme commande dans c# un message d'erreur 'invalid character' est generé.

j'utilisé le code suivant:


cmd = new OleDbCommand();
cmd.CommandText = "$&exp "+user+"/"+password+ " owner="+owner + " tables="+table +" file='"+file+ "'";
label5.Text = cmd.CommandText;
cmd.ExecuteNonQuery();
cmd.CommandText = "Commit";
cmd.ExecuteNonQuery();
cmd.Dispose();

pouvez vous m'aider,(toute idee sera necessaire n'hesitez pas de me repondre s'il vous plait)
Merci d'avance

8 réponses

Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Oui, je pense qu'il faut utiliser un Process.

Essaie un code du genre :
using System.Diagnostics;

[..]
// définition du process
ProcessStartInfo psi = new ProcessStartInfo();
// n'ouvrira pas de fenêtre
psi.CreateNoWindow = true;
// lancera la commande nommée exp
psi.FileName = "exp";
// avec ces arguments
psi.Arguments = user + "/" + password + " owner=" + owner + " tables=" + table + " file='" + file + "'";
// dans ce répertoire, s'il n'est pas référencé dans la variable d'environnement
psi.WorkingDirectory = @"C:\folder\ou\se\trouve\exp";
// on lance pour de vrai
Process exp = Process.Start(psi);

[..]
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Salut,

je ne suis pas expert en Oracle (même si j'ai pas mal mangé de PL/SQL sur Oracle Forms 6 fût un temps) mais je vais me tenter.

sqlplus semble être une commande shell, et non une commande SQL. Si c'est bien le cas il ne faut pas l'exécuter via une OleDbCommand (requêtage sql), mais avec Process.Start (namespace System.Diagnostic).

Désolé si j'ai répondu complètement à côté, mais ça aura au moins permis de remonter ton topic ^^
Messages postés
21
Date d'inscription
mardi 8 mars 2011
Statut
Membre
Dernière intervention
13 juin 2011

Merci bienn pour ta reponce jopop,


je ne sait pas est ce que je doit utiliser une commande sql,parceque ma commande marche bien dans l'outils sqlplus et y'a pas de soussis.
est ce que malgré ça je doit utiliser le process.start?
cordialement Archaj,
Messages postés
21
Date d'inscription
mardi 8 mars 2011
Statut
Membre
Dernière intervention
13 juin 2011

Merci bien frere

quant je lance l'export un fichier (.dmp) est crée ,mais il est vide (0k) ,meme si la table que j'exporté contient des enregistrements.
j'ai pas compri bien comment ca se passe.

Merci encore une fois
cordialement,
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Salut,

Es-tu sûr des paramètres passés à la commande ?
Le fichier est vide vide, pas même le CREATE TABLE ?
Regarde les valeurs de sortie de la commande, comme suit :
[..]
Process exp = Process.Start(psi);
string stdErr = exp.StandardError.ReadToEnd();
string stdOut = exp.StandardOutput.ReadToEnd();
[..]

Tu en apprendras plus sur le souci ;)
Messages postés
21
Date d'inscription
mardi 8 mars 2011
Statut
Membre
Dernière intervention
13 juin 2011

Bonjour,
oui quand j'ajouté stdErr et stdOut j'ai une exception:


System.InvalidOperationException:StandardError has not been redirected at System.Diagnostics.Process.get_standardError()


dans la fonction Exporter.


Cordialement,
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Oups, il faut ces param là en plus :
	[..]
psi.RedirectStandardError =  true;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process exp = Process.Start(psi);
// on attend la fin du process pour avoir tout bien
exp.WaitForExit();
[..]


A noter que WorkingDirectory n'indique plus le répertoire de l'executable lorsque UseShellExecute est à false. Il faut donc préciser le folder dans FileName :
	psi.FileName  = @"C:\folder\ou\se\trouve\exp\exp";
Messages postés
21
Date d'inscription
mardi 8 mars 2011
Statut
Membre
Dernière intervention
13 juin 2011