Bir DataTable üzerinden yineleme nasıl yapılır


143

Bir yineleme yapmak gerekir DataTable. Orada adında bir sütun var ImagePath.

Ben kullanırken DataReaderben bu şekilde yaparım:

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

Aynı şeyi kullanarak nasıl başarabilirim DataTable?


1
dr.Read (), veritabanından satır satır değil, ağ arabelleğinden satır satır okur. Veritabanından yalnızca bir getirme vardır. Bu nedenle bir veri tablosundan okumak herhangi bir performans kazancı sunmayacaktır.
developer747

Yanıtlar:


288
DataTable dt = new DataTable();

SqlDataAdapter adapter = new SqlDataAdapter(cmd);

adapter.Fill(dt);

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

... bağlantının açık olduğunu ve komutun doğru kurulduğunu varsayar. Ben de sözdizimini kontrol etmedim, ama size bir fikir vermeli.


Birisinin bir linqçözüm aradığını ve (cmd)yukarıdaki çözümün neresinde olduğunu merak ettiğini varsayalım ?
Jogi

@RehanKhan - cmdçalıştırılacak SQL Komutu olurdu. LINQ kullanıyorsanız, LINQ Sorgunuzu yazar ve sonuçlarınızı bu şekilde alırsınız.
Justin Niessner

Neden foreach yerine loop için kullanılmıyor? satır yalnızca bir kez kullanılıyor, bu nedenle döngü için daha iyi performans verir mi?
Enrico

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

Bunu bellekten yazıyorum.
Umarım bu size nesne modelini anlamanız için yeterli ipucu verir.

DataTable-> DataRowCollection-> DataRow(hangisi columnName veya ordinal kullanarak o satır için sütun içeriğini kullanabilir ve arayabilir).

-> = içerir.


21

DataSets için linq uzantılarını da kullanabilirsiniz:

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

Olması unutmayınız AsEnumerable()için DataTablesize olması gerekir System.Data.DataSetExtensionsbir bağımlılık olarak eklenecektir.
sigod

Net Core'da mevcut değildir buraya bakın: stackoverflow.com/questions/45900952/…
Markive

5

Yukarıdaki örnekler oldukça faydalıdır. Ancak, belirli bir satırın belirli bir değere sahip olup olmadığını kontrol etmek istiyorsak. Evet ise, silin ve kırın ve herhangi bir değer bulunmazsa düz atış hatası. Aşağıdaki kod çalışır:

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 ";
            }
        }

Bu satırları silmek için deli bir yoludur !! Sadece tek bir TSQL silme ifadesi yayınlayın!
Mitch Wheat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.