Import de données d'un SGBD à un autre

Neow26 Messages postés 50 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 mai 2007 - 8 mars 2006 à 00:27
Neow26 Messages postés 50 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 mai 2007 - 10 mars 2006 à 18:11
Salut tout le monde

Afin d'importer des données d'un SGBD à un autre (SQL Serveur à PostgreSQL), j'ai fait un petit programme d'import.
Dans ce programme j'initialise 2 connection (CnnSQL et CnnPG) et je récupère ma liste de table à importer dans une collection de type Queue (PoolTable).
J'appelle ensuite la procédure suivante afin d'importer mes données :

private
void TraiterTable(
)
{

string NomTable;

SqlDataAdapter SqlDA;

DataSet SqlDS =
new
DataSet();

OleDbDataAdapter PGDA;

while (PoolTable.Count > 0)
{
NomTable = PoolTable.Dequeue();

try
{
SqlDA =
new
SqlDataAdapter(
"Select * From " + NomTable, CnnSql);
SqlDA.Fill(SqlDS,NomTable);
PGDA =
new
OleDbDataAdapter(
"Select * From " + NomTable, CnnPG);
PGDA.Update(SqlDS, NomTable);
}

catch {}
}
}

Je n'ai aucune erreur mais aucune données n'est copiée. Je ne suis pas sur à 100% que mes structures sont équivalentes car j'ai utiliser un programme externe pour les importer.
Une suggestion pour importer la structure des tables pourraient aussi m'être utile.

Merci.

29 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mars 2006 à 00:28
Lit les pages que j'ai lier et tu t'appercevras qu'on ne passe pas de l'un à l'autre, c'est 2 choses différentes.
Et sur la page consacrée à DataColumn tu remarqueras aussi la propriété DataType ;-)

/*
coq
MVP Visual C#
*/
0
Neow26 Messages postés 50 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 mai 2007
10 mars 2006 à 00:36
C'est bien tout ça mais je veux faire l'inverse j'ai mon Type mais je ne connais pas le OleDbType à renseigner pour le paramètre.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mars 2006 à 00:49
foreach(DataColumn Col in SqlDS.Tables[0].Columns[0].ExtendedProperties)
{
PGDA.InsertCommand.Parameters.Add("@" + Col.ColumnName,Col.DataType, 20 , Col.ColumnName);
}

?

/*
coq
MVP Visual C#
*/
0
Neow26 Messages postés 50 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 mai 2007
10 mars 2006 à 00:58
Ca ne marche pas car ça prends un OleDbType
0

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

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mars 2006 à 01:48
Ah oui j'ai complètement zappé le type de la propriété DataType -_-

Là en dehors de la méthode utilitaire faite maison pour "mapper" les types .Net à leur équivalent OleDb, je ne vois pas trop.

Mis à part naturellement l'intérogation du schéma OleDb afin d'obtenir cette information via Columns :

Exemple basique de récupération colonne par colonne, avec filtrage par table et colonne donc : (conn est une instance de OleDbConnection)
DataTable oleDbInfosTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[]{null, null, NomTable, Col.ColumnName});
OleDbType type = (OleDbType)oleDbInfosTable.Rows[0]["DATA_TYPE"];
...

/*
coq
MVP Visual C#
*/
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
10 mars 2006 à 08:40
merci coq de venir a notre secours :)

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
Neow26 Messages postés 50 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 mai 2007
10 mars 2006 à 11:55
Quand j'essaie de faire "
DataTable oleDbInfosTable = CnnPG.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[]{null, null, NomTable, Col.ColumnName});" j'obtient une erreur : "Unspecified error: E_OUTOFMEMORY(0x8007000E)".

Ma connection CnnPG est bien ouverte, je récupère même un dataset avant, mon non de table est bien rensignée et mon non de colonne aussi.
J'ai la même erreur si je ne précise ni la table ni la colonne.

Une idée pour cette erreur ?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 mars 2006 à 12:14
Tiens, ça me fait penser au driver Oracle qui finissait en StackOverflow.
Dans mon cas la solution avait été de passer par celui que fournis MS, mais pour PostgreSQL je ne sais pas si il y a une alternative à celui de l'éditeur.

Ca te le fait aussi sur d'autres Guid ?

/*
coq
MVP Visual C#
*/
0
Neow26 Messages postés 50 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 mai 2007
10 mars 2006 à 18:11
Oui ça me le fait sur d'autres Guid.
C'est vrai que par contre pour la connection je suis pas sur à 100%

J'utilise la chaine de connection suivante : Provider=PostgreSQL.1;Password=monPass;User ID=monId;Data Source=localhost;Location=maBase;

Je n'arrive pas à me connecter par l'intermediaire d'un lien odbc.
0
Rejoignez-nous