bonjour tout le monde
je sois en train de réaliser une application avec c# et oracle 9i et l'une des phase que suis entrain de faire et d'importer des fichier avec une extension dbf à ma base oracle mais je ne sais pas comment faire aidez moi svp
bonjour tout le monde
je sois en train de réaliser une application avec c# et oracle 9i et l'une des phase que suis entrain de faire et d'importer des fichier avec une extension dbf à ma base oracle mais je ne sais pas comment faire aidez moi svp
Bonjour,
Une solution serait de passer par un format intermédiaire que peut exporter FoxPro et peut importer Oracle. Le format CSV devrait fonctionner, mais si la volumétrie des données est trop importante, faut passer par un outil de migration.
Je crois que Oracle en fournit un ... Mais je ne me rappelle plus du nom.
EDIT : Oracle Migration Workbench
Svp connais-tu un tutorial consernant l'utilisation de oracle migration workbench ?
merci
Essaie d'exporter les données dBase vers le format SQL*Loader, et de les importer dans Oracle avec SQL*Loader
Ou encore, tu peux passer par un DataSet et 2 DataAdapters :
- un 1er DataAdapter (OdbcDataAdapter par exemple) charge dans le DataSet les données de la base d'origine
- un second DataAdapter (OracleDataAdapter) qui insère les lignes dans la base de destination
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 // DataAdapter "origine" DbDataAdapter sourceAdapter = new OdbcDataAdapter(); sourceAdapter.SelectCommand = sourceConnection.CreateCommand(); sourceAdapter.SelectCommand.CommandText = "SELECT * FROM uneTable"; sourceAdapter.AcceptChangesDuringFill = false; // nécessaire pour que les lignes chargées soient prises en compte par Update // DataAdapter "destination" DbDataAdapter targetAdapter = new OracleDataAdapter(); targetAdapter.SelectCommand = targetConnection.CreateCommand(); targetAdapter.SelectCommand = "SELECT * FROM uneTable"; // On utilise un CommandBuilder pour générer automatiquement les commandes UPDATE/INSERT/DELETE DbCommandBuilder targetCommandBuilder = new OracleCommandBuilder(); targetCommandBuilder.DataAdapter = targetAdapter; // On charge dans un DataSet les données de la base d'origine : DataSet ds = new DataSet(); sourceAdapter.Fill(ds); // On insère les données dans la base de destination : targetAdapter.Update(ds);
(ça suppose d'avoir d'abord créé la structure des tables dans Oracle)
Cette dernière méthode fonctionne bien dans le cas que j'ai testé, mais je ne sais pas si ce sera toujours le cas... de plus, si le volume de données est important, il faudra envisager un transfert des données par blocs pour ne pas saturer la mémoire.
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
merci tomlev pour ta réponse et je m'excuse pour pour ma faute de poster deux fois le méme sujet ;
je vais l'essayer maintenant
a+++
j'ai essaye la premiere methode de sql loader ça marché avec un fichier txt,csv,dat mais avec un fichier dbf non
et la methode il faut que je converti les fichier dbf en fichier dbf pour foxpro
mais j'ai choisit de travailler avec sql loader et je voudrais savoir est ce qu'il y a une solution pour les extension dbf
thanks
SQL*Loader n'acceptera pas directement un fichier dbf
Comme je te l'ai dit dans le précédent message, il faut d'abord extraire les données de la base DBF pour les mettre sous forme de fichier texte lisible par SQL*Loader.
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
j' ai fais l'extraction des fichier dbf dans un fichier txt a l'aide d'un fichier .bat mais les donné sont mis dans ce fichier txt n'importe comment .
alors j'ai refais l'extraction sur un fichier.csv ,ici les données son bien classer mais rien ne se passe lorque j'excute sqlldr voici mon code du fichier control:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 LOAD DATA INFILE 'E:\dbf\icxcf.csv' TRUNCATE INTO TABLE ICXCF FIELDS TERMINATED BY ';' ( Msize , Psize )
il ressemble à quoi ton fichier CSV ?
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
il rassemble a un fichier xls
j'ai trouver l'astuce pour le fichier csv alors j'ai crée un csv avec un séparateur ";" mais mon problème maintenant et dans le fichier .bat c'est comment ne pas copier la premiere ligne de mon fichier .dbf
voici le contenu du fichier .bat::
car je copier avec cette commande il va génerer dans le .csv le nom du colone se qui empeche l'alimentation de ma table oracle avec sqlldr.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @echo pause xcopy e:\dbf\icxrd.dbf e:\dbf\icxrd.csv
extrait du fichier .csv:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 REGISTER;LIGNE;DF;DT;VAL;QTY;QTY2;TEXT------>je voudrais enlevé cette ligne 6458;1;20060525;06/01/2006;78,000;7;1;SCHMIDT 7365;1;20060531;06/01/2006;80,000;1;2;JOMMA
Le format dbf c'est du texte ??? je pensais que c'était un format binaire...
Pour sauter la première ligne tu peux ajouter SKIP=1 dans le fichier de contrôle (ou un truc comme ça)
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Les bases de données dBase sont bien en format texte, avec un header descriptif, qui est différent selon la version dBase évidemment
les base dbase ne sont pas sous format text il ont 'lextension dbf mais vu que je peux pas imoprter directement du format txt il fallait que je copier le contenu de dbf vers un fichier text ou csv pour pouvoir l'utiser avec sqlldr mais le pb persiste encore car j'ai pas trouver une solution pour copier le contenu d'un dbf dans txt ou csv avec un separateur resultat voulu un fichier comme ça sous cette forme :
mais ce que j'obtient c'est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 6458;1;20060525;06/01/2006;78,000;7;1;SCHMIDT 7365;1;20060531;06/01/2006;80,000;1;2;JOMMA
alors il fallait que j'ouvre le fichier csv et je le ré-enregistre sous le format csv(séparateur:point virgule) comme ça je peut le loader avec sqlldr ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 "M REGISTER ÂQCw| êÂ" LIGNE ER ÂQNw| êÂ" DF NE ER ÂQDw| êÂ" DT NE ER ÂQDw| êÂ" VAL E ER ÂQNw| êÂ" QTY E ER ÂQNw| êÂ" QTY2 ER ÂQNw| êÂ" TEXT ER ÂQCw| êÂ" 6458 12006052520060601 78.000 7 1SCHMIDT 7365 12006053120060601 80.000 1 2JOMMA 2673 12006052520060601 313.600 1 2DELEFOSSE 2674 12006052520060601 313.600 1 2DELAMARRE 7366 12006053120060601 85.000 1 1ASAKRI 2675 12006052520060601 425.600 1 1JLAIEL 2626 12006051820060601 627.200 1 2BRANLANT 2627 12006051820060601 0.000 14 0BRANLANT 7467 12006060120060601 0.000 0 0chef cuisine italien 7469 12006060120060601 0.000
Et alors ?
Il s'agit bien de format texte.
un .csv est aussi un format texte.
Ce qu'il te faut c'est utiliser un logiciel qui peut lire une base de données DBase pour experter tes données.
Tes tentatives via un .bat et des copies de fichiers ou des changements d'extension sont vouées à l'échec.
(inutile d'ouvrir plusieurs discussions, ton problème est d'importer une base dBase dans Oracle pas de savoir comment copier un fichier via un .bat)
Re-Bonjour
vu que j'ai pas trouvée de solution efficace avec sqlldr j'ai essayé de travailler avec la deuxièmme méthode proposé par tomlev .
j'ai realiser une nouvelle connection odbc et la connection effectuer voici mon code:
mail lors de l'exécution du prg le message suivant s'affiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 string chaine1 = "Dsn=db_debiteur;uid=iw;pwd=iw"; string chaine2 = "Data Source=rapport;User Id=user_rp;Password=rapport;Unicode=true"; try { OdbcConnection con1 = new OdbcConnection(chaine1); con1.Open(); string req="select * from icxrm"; //data adapter pour la source de donnée odbc(origine) OdbcDataAdapter sourceAdapter = new OdbcDataAdapter(req,con1); dts_rm_importation dts_source=new dts_rm_importation(); sourceAdapter.Fill(dts_source, "icxrm"); //partie pour dataadapter pour la source de déstination oracle OracleConnection con2 = new OracleConnection(chaine2); con2.Open(); DataRow[] dr = dts_source.Tables["icxrm"].Select(); string req2="select * from icxrd"; dts_destination dts_cible=new dts_destination(); OracleDataAdapter cible_adap = new OracleDataAdapter(req2, con2); cible_adap.Fill(dts_cible, "icxrm"); DataRow dest = dts_cible.Tables["icxrm"].NewRow(); for (int i = 0; i < dr.Length; i++) { dest["REGISTER"] = dr[i]["REGISTER"].ToString(); dest["ARR"] = dr[i]["ARR"].ToString(); dest["DEP"] = dr[i]["DEP"].ToString(); dest["NAME"] = dr[i]["NAME"].ToString(); dest["ROOM"] = dr[i]["ROOM"].ToString(); dest["RKAT"] = dr[i]["RKAT"].ToString(); dest["GONE"] = dr[i]["GONE"].ToString(); dest["RFIXE"] = dr[i]["RFIXE"].ToString(); dest["REXTRA"] =dr[i]["REXTRA"].ToString(); dest["RPAYM"] = dr[i]["RPAYM"].ToString(); dest["IMPORTED"] = dr[i]["IMPORTED"].ToString(); dts_cible.Tables["icxrd"].Rows.Add(dest); OracleCommandBuilder cmd3 = new OracleCommandBuilder(cible_adap); cible_adap.InsertCommand = cmd3.GetInsertCommand(); cible_adap.Update(dts_cible, "icxrm"); MessageBox.Show("bien fait"); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); }
ben ça semble assez clair... tu n'as pas le droit d'accéder au fichier en question
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
mais le pb lorsque j'effectue une requête de sélection avec le graphique ça marche pour la première fois et après de terminer la phase du graphique et je fais preview data du odbcdatadapter ne fonctionne pas
voici le résultat de la première fois:
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager