2010-09-24 7 views
0

J'utilise System.Data.IDbCommand pour interroger une table qui a une clé primaire. Ma requête le joint à d'autres tables et récupère plusieurs enregistrements avec la même valeur dans la colonne de la clé primaire, mais des valeurs différentes dans les autres colonnes jointes et c'est le comportement prévu.Pouvons-nous ignorer le schéma source lors d'une requête en utilisant IDbCommand?

Toutefois, IDbCommand.ExecuteReader(). GetSchemaTable() montre que la table de schéma interne du lecteur possède une clé primaire sur cette colonne. Maintenant, si j'essaye de charger ce lecteur dans un System.Data.DataTable (simple ancien DataTable, non typé), il lance une exception de violation de contrainte (évidemment parce qu'il essaye d'insérer la même valeur pour la colonne de clé primaire).

Existe-t-il un moyen de demander à ExecuteReader() d'ignorer le schéma source ou de ne pas appliquer les contraintes?

Autres informations: Ceci est .Net 2.0.

Merci à l'avance

+0

La table résultante ne doit pas avoir cette clé primaire. Quel fournisseur utilisez-vous? – svick

+0

J'utilise ODBC. –

Répondre

2

Pouvez-vous utiliser quelque chose comme

DataTable result = new DataTable(); 
SqlCeDataAdapter adapter = new SqlCeDataAdapter(command); 
adapter.Fill(result); 

Initialiser la commande avec votre requête et utiliser le fournisseur correct.

+0

Bien que je suis sûr que cela fonctionnera (parce que MSDN le dit), je ne serai pas capable de l'utiliser car je vais changer le DataAdapter pour mon projet entier ou écrire une autre méthode/classe pour simplement exécuter cette requête. J'ai trouvé un autre moyen de faire ce travail. Mais je vais quand même marquer cela comme réponse parce que ma question initiale ne spécifiait pas les contraintes que je viens d'énumérer. Merci d'avoir pris le temps de répondre à ma requête. –

0

Les gars, j'ai trouvé une solution de contournement. Ce n'est pas une solution cependant. J'ai modifié ma requête pour amener cette colonne d'une autre table où elle était présente en tant que colonne de clé étrangère faisant référence à la colonne de clé primaire de ma table d'origine.

À la votre!