DataTable을 반복하는 방법


143

를 통해 반복해야합니다 DataTable. 라는 열이 ImagePath있습니다.

내가 사용할 때 나는 DataReader이렇게한다 :

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

를 사용하여 같은 것을 어떻게 달성 할 수 DataTable있습니까?


1
dr.Read ()는 데이터베이스에서 행 단위로가 아니라 네트워크 버퍼에서 행 단위로 읽습니다. 데이터베이스에서 하나의 반입 만 있습니다. 따라서 데이터 테이블에서 읽는 것이 성능 향상을 제공하지 않습니다.
developer747

답변:


287
DataTable dt = new DataTable();

SqlDataAdapter adapter = new SqlDataAdapter(cmd);

adapter.Fill(dt);

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

... 연결이 열려 있고 명령이 올바르게 설정되었다고 가정합니다. 또한 구문을 확인하지는 않았지만 아이디어를 제공해야합니다.


누군가 linq솔루션을 찾고 (cmd)위의 솔루션 이 어디에 있는지 궁금해 한다고 가정 해보십시오 .
Jogi

@RehanKhan- cmd실행할 SQL 명령입니다. LINQ를 사용하는 경우 LINQ 쿼리를 작성하여 결과를 얻을 수 있습니다.
저스틴 니스 너

foreach 대신 for 루프를 사용하지 않는 이유는 무엇입니까? 행이 한 번만 사용되므로 for 루프가 더 나은 성능을 제공합니까?
Enrico

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

나는 이것을 메모리에서 쓰고 있습니다.
이것이 객체 모델을 이해하기에 충분한 힌트를 제공하기를 바랍니다.

DataTable-> DataRowCollection-> DataRow(columnName 또는 서수를 사용하여 해당 행의 열 내용을 사용하고 찾을 수 있음).

-> = 포함합니다.


21

DataSet에 linq 확장자를 사용할 수도 있습니다.

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

가지고 있다는 점 유의 하시길 바랍니다 AsEnumerable()위해 DataTable당신이해야 할 System.Data.DataSetExtensions종속성으로 추가 될 수있다.
sigod

.Net Core에서 사용할 수 없음 여기를 참조하십시오 : stackoverflow.com/questions/45900952/…
Markive

5

위의 예는 매우 유용합니다. 그러나 특정 행에 특정 값이 있는지 여부를 확인하려는 경우. 그렇다면 삭제하고 중단하고 값을 찾지 못하면 직선 오류가 발생합니다. 아래 코드가 작동합니다.

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

이것은 행을 삭제하는 미친 방법입니다! 단 하나의 TSQL delete 문만 내보내십시오!
Mitch Wheat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.