Neow26
Messages postés50Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention12 mai 2007
-
8 mars 2006 à 00:27
Neow26
Messages postés50Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention12 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.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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 ;-)
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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"];
...
Neow26
Messages postés50Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention12 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.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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.