2009-11-21 7 views
86

Je dois parcourir par DataTable. J'ai une colonne nommée ImagePath.Comment parcourir dans un DataTable

Quand je me sers DataReader je le fais de cette façon:

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

Comment puis-je obtenir la même chose en utilisant DataTable?

+1

dr.Read() lit ligne par ligne à partir du tampon réseau, pas ligne par ligne à partir de la base de données. Il n'y a qu'un seul chargement de la base de données. Par conséquent lire à partir d'un datatable ne va pas offrir un gain de performance. – developer747

Répondre

192
DataTable dt = new DataTable(); 

SqlDataAdapter adapter = new SqlDataAdapter(cmd); 

adapter.Fill(dt); 

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

... suppose que la connexion est ouverte et que la commande est configurée correctement. Je n'ai pas non plus vérifié la syntaxe, mais cela devrait vous donner l'idée.

+4

+1. Vous me battez de quelques secondes :) – shahkalpesh

+0

supposons que quelqu'un cherche une solution 'linq' et se demande où est' (cmd) 'dans la solution ci-dessus? – Jogi

+0

@RehanKhan - 'cmd' serait la commande SQL à exécuter. Si vous utilisez LINQ, vous devez écrire votre requête LINQ et obtenir vos résultats de cette façon. –

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

J'écris cela depuis ma mémoire.
Espérons que cela vous donne assez de conseils pour comprendre le modèle d'objet.

DataTable ->DataRowCollection ->DataRow (que l'on peut utiliser & regard pour le contenu des colonnes de cette ligne, soit en utilisant columnName ou ordinal).

-> = contient.

14

Vous pouvez également utiliser des extensions LINQ pour DataSets:

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

Les exemples ci-dessus sont très utiles. Mais, si nous voulons vérifier si une ligne particulière a une valeur particulière ou non. Si oui, alors supprimez et cassez et dans le cas d'aucune valeur trouvée erreur droite de lancer. Le code ci-dessous fonctionne:

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

C'est un moyen fou d'accomplir la suppression des lignes !! Emettez simplement une seule instruction de suppression TSQL! –

Questions connexes