2013-03-19 60 views
-1

這裏裏面得到的是我的代碼如何顯示所有結果foreach循環

foreach (string word in words) 
      { 
       SqlCommand cmd= new SqlCommand("select * from skills where (skills like '%"+word+"%')",con); 
       SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); 
       da.Fill(dt); 

      } 

最後我想顯示所有的結果變成一個GridView或一些地方(在每個循環它得到不同的結果)。我怎樣才能做到這一點?

+0

你創建新的數據表中的每個循環迭代,所以失去了以前的內容。除此之外,您不會說出使用此代碼時出現了哪些錯誤,或者您已嘗試如何顯示該錯誤。這將有所幫助。我還會在此聲明強制性的'你應該使用SQL參數來避免SQL注入攻擊'。 – 2013-03-19 09:50:56

+0

你可以使用'MERGE'數據表。看到這個鏈接: - http://msdn.microsoft.com/en-us/library/system.data.datatable.merge.aspx – Pranav 2013-03-19 09:52:38

+0

失去了以前的內容..這是確切的問題..我想顯示所有的結果...需要您的意見 – 2013-03-19 09:57:36

回答

1

你可以嘗試這樣的: -

DataTable dt = new DataTable(); 
foreach (string word in words) 
      { 
       SqlCommand cmd= new SqlCommand("select * from skills where (skills like '%"+word+"%')",con); 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 
       DataTable dt1 = new DataTable(); 
       da.Fill(dt1); 
       if (dt!= null)// to check if datatable is empty:- 
       dt.Merge(dt1, false, MissingSchemaAction.Add); 
       else 
       dt=dt1.copy();// copy one datatable to another 
       dt1.clear(); 
      } 

//最後綁定的GridView的數據表: -

GridView1.DataSource = dt; 

GridView1.DataBind(); 
+0

如何在網格視圖中顯示? – 2013-03-19 10:01:43

+0

最後綁定與網格視圖的數據表... – Pranav 2013-03-19 10:02:38

+0

'System.Data.DataTable'不包含'複製'的定義 – 2013-03-19 10:10:12

2

如果你只是想在GridView的C#的winform顯示它,只是做:

gridView1.DataSource = dt; 

一個非常粗略的架構雖然。

編輯1:

好吧,我誤讀了要求。掃描讀取不夠好。 Pranav的答案已經是一個可行的解決方案,我會爲它添加一些額外的註釋。

首先,如果您在執行SELECT聲明,效果會變得非常糟糕。每次SELECT命中時它都會打開關閉連接。其次,從mssql的角度來看,像'%word%'這樣會給你帶來麻煩,因爲它不能被索引。此外,如果您可以獲得正確的數據以便構建where skill in('skill1', 'skill2', '..', '..'),那麼效果會更好,從而實現更快的性能並降低DataTable中的for的需求。

如果您仍然需要使用%word%,那麼請考慮使用臨時表,然後在sql中進行查詢。通常,它應該比SELECT更快地執行。

+0

但先生它只會顯示我們得到的最後結果在循環..我想寫所有的結果.. – 2013-03-19 09:56:33

+0

好吧我誤讀要求。改用Pranav的答案。這很好。 – Fendy 2013-03-19 09:58:02

+0

爲你+1 ..你的解決方案好得多... – Pranav 2013-03-19 10:15:29

相關問題