2010-06-11 4 views
2

Lors du remplissage d'un DataSet, j'utilise la valeur "AddWithKey" pour l'élément MissingSchemaAction du DataAdapter. Selon MSDN:DataSet - Assurer les données PrimaryKey lors du remplissage avec une requête qui est une jointure externe

Ajout d'informations de schéma à un DataSet avant de le remplir avec des données assure que les contraintes de clé primaire sont inclus avec les objets DataTable dans le DataSet .

Mais, quand je fais ce qui suit:

DataColumn[] foo = TheDataSet.Tables["Table1"].PrimaryKey; 

Je reçois foo.Length de 0. Y at-il quelque chose de plus que je dois faire en plus de cette ?:

string TheQuery = "SELECT * FROM Table1 LEFT OUTER JOIN Table2 ON Table1.EVENT_NUM = Table2.EVENT_USER_NUM; 
using (SqlDataAdapter TheDataAdapter = new SqlDataAdapter(TheQuery, TheConnection) 
{ 
    TheDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; 
    TheDataAdapter.Fill(TheDataSet, "Table1"); 
} 

Remarque , si ma requête était:

string TheQuery = "SELECT * FROM Table1"; 

Tout irait bien. Mais, je ne reçois pas de PrimaryKey s'il y a une jointure. Est-ce encore possible (pour obtenir la clé primaire)?

EDIT: Au début, je ne savais pas que c'était un JOIN. Bien, j'ai testé INNER JOINS qui retournerait une clé primaire. Le coupable semble être le fait que c'est un OUTER JOIN. Ainsi, j'ai changé le titre.

+2

La table possède-t-elle une clé primaire? – SLaks

+0

New info: Oui, il y a une clé primaire, mais je viens de réaliser que c'était sur une requête qui était JOIN (les deux tables ont une Clé primaire) – JustLooking

+0

Veuillez ne pas inclure de balises comme C# dans le titre. Gardez-les dans les tags, où ils appartiennent. –

Répondre

1

De msdn:

Si SelectCommand retourne les résultats d'une OUTER JOIN, le DataAdapter ne sera pas définir une valeur PrimaryKey pour le DataTable résultant. Vous devez définir le PrimaryKey vous-même à assurez-vous que les lignes en double sont résolu correctement.

Questions connexes