2010-07-27 5 views
0

J'ai une situation étrange ici et j'espère que quelqu'un peut m'aider. Je n'ai pas le même problème lors de l'utilisation d'un ensemble de données non typé.Populate Dataset avec UNION ALL requête SQL

OK. J'ai un jeu de données typé MyDS avec un MyTable dactylographié (TableID, Title, Message).

Le tableau est rempli avec des résultats de deux tables, en utilisant un UNION ALL


Select 
    TableAID, 
    TableATitle, 
    Message 
FROM TableA 

UNION ALL 

Select 
    TableBID, 
    TableBTitle, 
    Message 
FROM TableB 

Dim cmd As SqlCommand = New SqlCommand("SQL", conn) 

Dim da AS SqlDataAdapter = New SqlDataAdapter(cmd) 
da.Fill(MyDS.MyTable) 

La requête fonctionne bien sur SQL Server, mais quand je fais un pas dans le code, je trouve TableAID incorrect ou TableAID.

La table A a une rangée et la tableB a 15 rangées. Donc mon dataset renvoie 16 lignes (donc en gros c'est une situation de détail principal). Toutes les colonnes renvoient les données respectives correctes, à l'exception de TableAID et TableBID.

TableAID a value = et TableBID a 10, 11, 12, 13, 24 ........., mais quand je fais un pas à travers, la

MyDS.MyTable(i).TableID
reste 100 tout au long des 16 fiches , au lieu de 100, 10, 11, 12, 13, ......... 24. Le titre, les données du message sont correctes. TableAID et TableBID sont mes clés primaires.

i = 0 à 15

Est-ce la façon dont les jeux de données tapées poignées UNION? Je ne voulais pas créer deux datatables typés et créer un SQL séparé pour chacun et créer une relation.

+0

Y a-t-il une logique conditionnelle dans le code que vous utilisez pour accéder à la base de données? Si oui, avez-vous la possibilité de modifier votre question pour l'inclure? –

+0

Il n'y a pas de logique conditionnelle. Je peuple un gridview avec les résultats. Rien d'extraordinaire. – Nyiko

+0

Je pense que je devrais voir le code derrière votre jeu de données fortement typé/datatable. – knslyr

Répondre

0

J'ai réussi à le réparer. Ce n'était pas du tout l'ensemble de données. J'utilisais en fait un proc stocké qui sélectionnait dans une vue, et j'avais 2 vues (view1 et view2) qui étaient presque les mêmes. Donc le sql ci-dessus venait de view2, mais le proc stocké utilisait view1. J'ai utilisé des vues parce que la déclaration était compliquée. Donc, ma moto est, si j'ai un complexe SELECT SQL que je dois utiliser dans mon proc stocké, le mettre en vue et avoir un proc simple de travailler avec. Le code est

   
Dim cmd As SqlCommand = New SqlCommand("StoredProcedureName", conn) 
cmd.CommandType = CommandType.StoredProcedure 

Non


Dim cmd As SqlCommand = New SqlCommand("SQL", conn) 

Je voulais presque remplacer mon jeu de données tapé avec un typées, parce que je manquais de temps. Dates limites LOL Merci de me faire croire que ce n'était pas l'ensemble de données puisque vous ne pouviez pas comprendre quel pourrait être le problème. LOL