2009-11-21 4 views
86

Мне нужно итерации через DataTable. У меня есть столбец, который называется ImagePath.Как перебирать данные DataTable

Когда я использую DataReader я сделать это таким образом:

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

Как я могу достичь того же с помощью DataTable?

+1

dr.Read() читает строку за строкой из сетевого буфера, а не строку за строкой из базы данных. Из базы данных только одна выборка. Следовательно, чтение из datatable не предполагает повышения производительности. – developer747

ответ

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

+0

Предположим, что кто-то ищет решение 'linq' и задается вопросом, где находится' (cmd) 'в приведенном выше решении? – Jogi

+0

@RehanKhan - 'cmd' будет выполнять команду SQL. Если вы используете LINQ, вы должны написать свой запрос LINQ и получить свои результаты таким образом. –

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

Я пишу это из памяти.
Надеюсь, это даст вам достаточно намека на понимание объектной модели.

DataTable ->DataRowCollection ->DataRow (который можно использовать & вид для содержимого столбца для этой строки, либо с помощью ColumnName или порядковый номер).

-> = содержит.

14

Вы также можете использовать расширения Linq для DataSets:

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 delete! –

Смежные вопросы