Problemme d'export de tables oracle 10g en c#

Résolu
archaj Messages postés 21 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 13 juin 2011 - 7 mars 2011 à 16:07
archaj Messages postés 21 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 13 juin 2011 - 9 mars 2011 à 23:47
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

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
8 mars 2011 à 18:00
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);

[..]
3
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
8 mars 2011 à 17:01
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 ^^
0
archaj Messages postés 21 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 13 juin 2011
8 mars 2011 à 17:12
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,
0
archaj Messages postés 21 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 13 juin 2011
8 mars 2011 à 22:14
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,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
9 mars 2011 à 10:48
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 ;)
0
archaj Messages postés 21 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 13 juin 2011
9 mars 2011 à 11:07
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,
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
9 mars 2011 à 11:38
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";
0
archaj Messages postés 21 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 13 juin 2011
9 mars 2011 à 23:47
0
Rejoignez-nous