2010-05-10 3 views
2

J'ai utilisé un ensemble de données pour stocker 15 tables dont j'ai besoin au moment du chargement. Lorsque j'ai rempli toutes les tables en utilisant la procédure stockée, il me renvoie toute la table mais le nom de la table ne vient pas comme celui du nom de table réel dans une base de données.Comment renvoyer le nom d'une table à partir d'une procédure stockée dans l'ensemble de données

Il prend toute la table avec le nom de la table sous Table1, Table2, Table3 ...

Je veux qu'ils soient le nom car ils sont en fait dans le tableau.

SELECT PK_GUEST_TYPE, [DESCRIPTION] FROM L_GUEST_TYPE 
SELECT PK_AGE_GROUP_ID, AGE_GROUP FROM L_AGE_GROUP 
SELECT PK_COMPANY_ID, COMPANY_NAME FROM M_COMPANY 
SELECT PK_COUNTRY_ID, COUNTRY FROM L_COUNTRY 
SELECT PK_EYE_COLOR_ID, [DESCRIPTION] FROM L_EYE_COLOR 
SELECT PK_GENDER_ID, [DESCRIPTION] FROM L_GENDER 
SELECT PK_HAIR_COLOR_ID, [DESCRIPTION] FROM L_HAIR_COLOR 
SELECT PK_STATE_PROVONCE_ID, [DESCRIPTION] FROM L_STATE_PROVINCE 
SELECT PK_STATUS_ID, [DESCRIPTION] FROM L_STATUS 

SELECT PK_TITLE_ID, [DESCRIPTION] FROM L_TITLE 
SELECT PK_TOWER_ID, [DESCRIPTION] FROM M_TOWER 
SELECT PK_CITY_ID, [DESCRIPTION] FROM L_CITY 
SELECT PK_REGISTER_TYPE_ID, [DESCRIPTION] FROM L_REGISTER_TYPE 

Voici le codage de mon frontend pour remplir le jeu de données.

   OpenConnection(); 
      adp.Fill(ds); 
      CloseConnection(true); 
+3

Vous ne pouvez pas faire cela - SqlDataAdapter * ne * pas * regarder les noms de table physique dans votre base de données pour déterminer les noms de table dans le DataSet ADO.NET. Désolé, il n'y a vraiment aucun moyen de le faire automagiquement. –

Répondre

0

avons le premier (ou dernier) déposer un tableau meta des noms de tables dans le même ordre que les tableaux suivants (ou précédente).

+0

thx, Cela pourrait être une solution au problème que je veux maintenant. Mais ce n'est pas une réponse réelle. Je peux voir dans la surcharge de la fonction adp.fill qu'il a l'une des surcharges qui a un tableau datatable qui peut mapper les noms des tables mais il cherche aussi deux autres paramètres que je ne veux pas donner. startRow, max enregistrements à récupérer –

+1

@Shantanu: Lloyd signifiait, retourner meta de votre SP (par exemple: comme SELECT 'L_GUEST_TYPE', 'L_AGE_GROUP' ... ') et remplir la propriété' .TableName' comme 'ds. Table [0] .TableName = ds.Table [nLastTable] .Rows [0] [0] .ToString() ' –

1

J'aurais investi du temps pour utiliser typed dataset, rend beaucoup de choses beaucoup plus facile. Rappelez-vous que vous reviendrez probablement à ce code dans un mois ou trois. :)

1

Peut être cela pourrait être le travail autour en ajoutant une colonne supplémentaire dans le tableau retour

Create procedure psfoo() 
AS 
select * ,'tbA' as TableName from tbA 
select * ,'tbB' as TableName from tbB 

Puis, en C# Code

foreach (DataTable dt in ds.Tables) 
    { 
     if (dt.Rows[0]["TableName"].ToString().Contains("tbA")) 
     { 

     } 
     else if (dt.Rows[0]["TableName"].ToString().Contains("tbB")) 
     { 

     } 
    } 
0

MS le mappage de table est une blague totale. Quelle est la différence entre

ds.Table(0) 
ds.Table("Table") 
ds.Table("Customer") 

quand on n'a pas de garantie de l'ordre des tableaux retournés dans notre application. Le besoin est une correspondance STRONG-NAME .... See my solution

Questions connexes