2009-11-21 132 views
86

我需要遍歷一個DataTable。我有一列名爲ImagePath如何遍歷一個DataTable

當我使用DataReader我做這種方式:

SqlDataReader dr = null; 
dr = cmd.ExecuteReader(); 
while (dr.Read()) 
{ 
    TextBox1.Text = dr["ImagePath"].ToString(); 
} 

我如何能實現使用DataTable是一回事嗎?

+1

dr.Read()由網絡緩衝區讀取一行行,不按行從database.There行只有一個從數據庫中獲取。因此從數據表中讀取不會提供任何性能增益。 – developer747 2013-07-05 22:08:48

回答

192
DataTable dt = new DataTable(); 

SqlDataAdapter adapter = new SqlDataAdapter(cmd); 

adapter.Fill(dt); 

foreach(DataRow row in dt.Rows) 
{ 
    TextBox1.Text = row["ImagePath"].ToString(); 
} 

...假定連接打開並且命令設置正確。我也沒有檢查語法,但它應該給你這個想法。

+4

+1。你擊敗了我幾秒鐘:) – shahkalpesh 2009-11-21 04:28:12

+0

假設有人正在尋找'linq'解決方案,並想知道上述解決方案中的'(cmd)'在哪裏? – Jogi 2016-05-07 14:39:17

+0

@RehanKhan - 'cmd'是要執行的SQL命令。如果你使用LINQ,你可以編寫你的LINQ查詢並以這種方式得到你的結果。 – 2016-05-07 20:03:41

23
foreach (DataRow row in myDataTable.Rows) 
{ 
    Console.WriteLine(row["ImagePath"]); 
} 

我從內存中寫這個。
希望這給你足夠的提示來理解對象模型。

DataTable - >DataRowCollection - >DataRow(其中之一可以使用&外表列內容該行,或者使用COLUMNNAME或有序)。

- > =包含。

14

您還可以使用LINQ擴展數據集:

var imagePaths = dt.AsEnumerble().Select(r => r.Field<string>("ImagePath"); 
foreach(string imgPath in imagePaths) 
{ 
    TextBox1.Text = imgPath; 
} 
3

以上的例子是相當有幫助的。但是,如果我們想檢查一個特定的行是否有特定的值。如果是,則刪除並中斷,如果沒有值,則發現直投錯誤。下面的代碼工作:

foreach (DataRow row in dtData.Rows) 
     { 
      if (row["Column_name"].ToString() == txtBox.Text) 
      { 
       // Getting the sequence number from the textbox. 
       string strName1 = txtRowDeletion.Text; 

       // Creating the SqlCommand object to access the stored procedure 
       // used to get the data for the grid. 
       string strDeleteData = "Sp_name"; 
       SqlCommand cmdDeleteData = new SqlCommand(strDeleteData, conn); 
       cmdDeleteData.CommandType = System.Data.CommandType.StoredProcedure; 

       // Running the query. 
       conn.Open(); 
       cmdDeleteData.ExecuteNonQuery(); 
       conn.Close(); 

       GetData(); 

       dtData = (DataTable)Session["GetData"]; 
       BindGrid(dtData); 

       lblMsgForDeletion.Text = "The row successfully deleted !!" + txtRowDeletion.Text; 
       txtRowDeletion.Text = ""; 
       break; 
      } 
      else 
      { 
       lblMsgForDeletion.Text = "The row is not present "; 
      } 
     } 
+0

這是一個瘋狂的方式來完成刪除行!只發出一個TSQL刪除語句! – 2017-02-10 00:15:25