2009-11-21 23 views
86

Necesito iterar a través de DataTable. Tengo una columna allí llamada ImagePath.Cómo iterar a través de una DataTable

Cuando utilizo DataReader lo hago de esta manera:

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

¿Cómo puedo lograr lo mismo usando DataTable?

+1

dr.Read() lee fila por fila desde el búfer de red, no fila por fila desde la base de datos. Solo hay una recuperación de la base de datos. Por lo tanto, la lectura de una tabla de datos no ofrece ninguna ganancia de rendimiento. – developer747

Respuesta

192
DataTable dt = new DataTable(); 

SqlDataAdapter adapter = new SqlDataAdapter(cmd); 

adapter.Fill(dt); 

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

... asume que la conexión está abierta y el comando está configurado correctamente. Tampoco revisé la sintaxis, pero debería darte la idea.

+4

+1. Me ganas por unos segundos :) – shahkalpesh

+0

supongamos que alguien está buscando una solución 'linq' y se pregunta dónde está' (cmd) 'en la solución anterior? – Jogi

+0

@RehanKhan - 'cmd' sería el comando SQL para ejecutar. Si está utilizando LINQ, debería escribir su consulta LINQ y obtener los resultados de esa manera. –

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

Escribo esto de la memoria.
Espero que esto te dé suficiente pista para entender el modelo de objetos.

DataTable ->DataRowCollection ->DataRow (que se puede utilizar para & mirada contenido de la columna de esa fila, ya sea usando columnName u ordinal).

-> = contiene.

14

También puede utilizar extensiones de LINQ para conjuntos de datos:

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

Los ejemplos anteriores son bastante útiles. Pero, si queremos verificar si una fila en particular tiene un valor particular o no. En caso afirmativo, elimine y rompa y, en caso de que no haya ningún valor, encuentre el error de tiro recto. A continuación, el código funciona:

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

¡Esta es una manera insana de lograr borrar filas! ¡Simplemente emita una sola declaración de eliminación de TSQL! –

Cuestiones relacionadas