source

데이터 세트 읽기

nicesource 2023. 5. 29. 10:59
반응형

데이터 세트 읽기

WPF의 데이터 세트에서 데이터를 읽는 방법은 무엇입니까?저는 두 칸만 있는 기차 시간표가 있는데 출발 시간을 읽고 다음 기차가 언제 출발하는지 계산할 수 있었으면 합니다.예를 들어, 지금 시간은 12시 29분이고 제 애플리케이션은 다음 기차가 12시 33분에 출발한다고 알려줘야 합니다.

저는 이미 좌우로 검색했습니다..NET 3.5입니다.

데이터 집합이 데이터베이스와 유사합니다.DataTable은 데이터베이스 테이블과 유사하며 DataRow는 테이블의 레코드와 유사합니다.필터링 또는 정렬 옵션을 추가하려면 DataView 개체를 사용하여 필터링 또는 정렬 옵션을 추가한 다음 별도의 DataTable 개체로 다시 변환합니다.

데이터베이스를 사용하여 데이터를 저장하는 경우 먼저 데이터베이스 테이블을 메모리의 DataSet 개체에 로드합니다.하나의 DataSet에 여러 데이터베이스 테이블을 로드하고 DataSet에서 DataTable 개체를 통해 읽을 특정 테이블을 선택할 수 있습니다.그런 다음 DataRow를 통해 DataTable에서 특정 데이터 행을 읽습니다.다음 코드는 단계를 보여줍니다.

SqlCeDataAdapter da = new SqlCeDataAdapter();
DataSet ds = new DataSet();
DataTable dt = new DataTable();

da.SelectCommand = new SqlCommand(@"SELECT * FROM FooTable", connString);
da.Fill(ds, "FooTable");
dt = ds.Tables["FooTable"];

foreach (DataRow dr in dt.Rows)
{
    MessageBox.Show(dr["Column1"].ToString());
}

특정 셀을 한 줄로 읽는 방법

int rowNum // row number
string columnName = "DepartureTime";  // database table column name
dt.Rows[rowNum][columnName].ToString();

ds가 데이터 세트인 경우 고객에게 액세스할 수 있습니다.첫 번째 테이블에서 첫 번째 행의 ID 열은 다음과 같습니다.

DataRow dr = ds.Tables[0].Rows[0];
Console.WriteLine(dr["CustomerID"]);

이것이 SQL Server 날짜 기반에서 온 것이라면 이런 종류의 쿼리를 실행할 수 있습니다.

Select Top 1 DepartureTime From TrainSchedule where DepartureTime > 
GetUTCDate()
Order By DepartureTime ASC

GetDate()날짜가 어떻게 저장되는지 확실하지 않은 경우에도 사용할 수 있습니다.

데이터가 어떻게 저장 및/또는 읽혀지고 있는지 잘 모르겠습니다.

TL;DR: - 데이터 집합에서 데이터 테이블을 가져오고 행 속성에서 읽습니다.

            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            DataColumn col = new DataColumn("Id", typeof(int));
            dt.Columns.Add(col);
            dt.Rows.Add(new object[] { 1 });
            ds.Tables.Add(dt);

            var row = ds.Tables[0].Rows[0];
            //access the ID column.  
            var id = (int) row.ItemArray[0];

데이터 세트는 데이터베이스에서 액세스하는 데이터의 복사본이지만 데이터베이스를 사용할 필요조차 없습니다.하지만 그것은 선호됩니다.

새 응용프로그램을 생성하는 경우에는 데이터 세트가 더 이상 선호되지 않으므로 Entity Framework 또는 NHibernate와 같은 ORM을 사용하는 것이 좋습니다. 그러나 데이터 세트는 여전히 지원되며, 제가 볼 때는 곧 지원되지 않을 것입니다.

표준 데이터 세트에서 읽는 경우 @KMC의 대답은 원하는 것입니다.그러나 이를 위한 적절한 방법은 강력한 유형의 데이터 세트를 만들고 IntelliSense를 활용할 수 있도록 이를 사용하는 것입니다.엔티티 프레임워크를 사용하지 않는 경우 계속 진행합니다.

프로젝트나 App_Data 폴더와 같은 데이터 액세스 계층을 위한 전용 공간이 아직 없다면 지금 생성하는 것이 좋습니다.그렇지 않으면 데이터 프로젝트 폴더에서 다음과 같이 진행합니다.Add > Add New Item > DataSet.생성된 파일의 확장자는 .xsd입니다.

그런 다음 데이터 테이블을 만들어야 합니다.DataTable을 만듭니다(파일을 클릭한 다음 설계 창에서 마우스 오른쪽 단추를 클릭합니다. 파일 확장자는 .xsd입니다.). 그리고 Add > DataTable을 클릭합니다.일부 열을 만듭니다(방금 작성한 데이터 테이블 > 추가 > 열을 마우스 오른쪽 버튼으로 클릭).마지막으로 데이터에 액세스하려면 테이블 어댑터가 필요합니다.데이터 세트에서 참조되는 데이터에 액세스하려면 데이터베이스에 대한 연결을 설정해야 합니다.

작업을 완료한 후(문 사용) 프로젝트에서 데이터 세트를 성공적으로 참조한 후 인텔리전트한 라이센스를 통해 데이터 세트에 액세스할 수 있습니다.따라서 비입력 데이터셋보다 훨씬 간편합니다.

가능한 경우 유형이 지정되지 않은 데이터 세트 대신 강력한 유형의 데이터 세트를 사용합니다.더 많은 작업을 생성할 수 있지만 나중에 인텔리전스를 사용하여 많은 시간을 절약할 수 있습니다.다음과 같은 작업을 수행할 수 있습니다.

MyStronglyTypedDataSet trainDataSet = new MyStronglyTypedDataSet();
DataAdapterForThisDataSet dataAdapter = new DataAdapterForThisDataSet();
//code to fill the dataset 
//omitted - you'll have to either use the wizard to create data fill/retrieval
//methods or you'll use your own custom classes to fill the dataset.
if(trainDataSet.NextTrainDepartureTime > CurrentTime){
   trainDataSet.QueueNextTrain = true; //assumes QueueNextTrain is in your Strongly-Typed dataset
}
else
    //do some other work

위의 예에서는 강력한 유형의 데이터 세트에 NextTrainDepartTime이라는 DateTime 유형의 열이 있다고 가정합니다.도움이 되길 바랍니다!

언급URL : https://stackoverflow.com/questions/6409839/reading-dataset

반응형