2010-05-10 53 views
2

我使用數據集來存儲15個表,我需要在加載時。當我使用存儲過程填充所有表時,它會將所有表返回給我,但表的名稱不會像數據庫中的實際表名一樣。如何從數據集中的存儲過程返回表名稱

這需要所有的表與表的名稱作爲表1,表2,表3 ...

我想他們是有名字作爲他們實際上是在表中。

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 

這是我的前端編碼填充數據集。

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

你不能那樣做 - SqlDataAdapter將*不*查看數據庫中的物理表名來確定ADO.NET數據集中的表名。對不起,沒有辦法做到這一點自動。 – 2010-05-10 11:37:22

回答

0

具有第一(或最後)表meta表的表名的以相同的順序如以下(或之前)的表。

+0

thx,這可能是我現在想要解決的問題的解決方案。但這不是一個真正的答案。我可以在adp.fill函數的重載中看到,它有一個具有可映射表名稱的datatable數組的重載,但它正在查找其他兩個參數,以及我不想提供的。即startRow,max記錄來檢索 – 2010-05-10 10:16:23

+1

@Shantanu:Lloyd的意思是,從你的SP中返回元數據(例如:像'SELECT'L_GUEST_TYPE','L_AGE_GROUP'...')並將'.TableName'屬性填寫爲'ds。表[0] .TableName = ds.Table [nLastTable] .Rows [0] [0] .ToString()' – 2010-05-10 10:41:17

1

我會投入時間使用typed dataset,使許多事情變得更容易。 請記住,你很可能會在一三個月內回到這段代碼。 :)

1

可能,這可能是工作在C#代碼中返回表

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

然後添加一個額外的列左右

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表映射是一個總的笑話。 是什麼

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

之間的區別,當我們有沒有我們的應用程序中返回的表的順序的保證。 需要的是一個STRONG-NAME匹配.... See my solution