728x90
반응형
안녕하세요. 오랜만에 개발 관련 글을 적어봅니다.
오늘은 불특정 테이블을 조회할 때 C# 대표 ORM 라이브러리인 Dapper를 이용해 알려드리고자 합니다.
(더 좋은 방법이 있다면 알려주세요)
특정 테이블이라면 Model클래스를 생성해서 타입지정해주면 알아서 IEnumerable<{Model클래스명}>으로 가져올 수 있습니다.
그런데 불특정 테이블이라면 클래스를 생성할 수 없으니 미리 그리드를 세팅할 수도 없고, 클래스도 생성할 수 없습니다.
코드와 주석을 함께 넣었습니다.
Datatable dt = new Datatable();
SqlMapper.GridReader reader = Conn.QueryMultiple("SELECT * from table");
var readDatas = reader.Read(); // Dapper의 Dynamic속성의 JSON형태 데이터로 나옵니다. 객체로 나오지 않아요.
// 컬럼 처리
foreach (IDictionary<string, object> row in readDatas)
{
var colNames = row.Keys;
foreach (string col in colNames)
{
dt.Columns.Add(new DataColumn(col, typeof(string), col));
}
break; // 컬럼은 한번만 생성하면 되니 브레이크 걸어서 for~loop를 빠져나갑니다.
}
// 데이터(Row) 처리
foreach (IDictionary<string, object> row in readDatas)
{
var colNames = row.Keys;
DataRow dr = dt.NewRow(); // 데이터테이블에 Row데이터 넣을 공간 만들기
foreach (string col in colNames)
{
row.TryGetValue(col, out object val); // 키를 통해 값을 가져옵니다.
dt[col] = val.ToString(); // object에서 string으로 변환해서 넣어줍니다.
}
dt.Rows.Add(dr); // 데이터 Row 추가
}
GridControl.DataSource = dt; // Devexpress GridControl에 반영합니다.
Dynamic을 직접 지정해서 하는 소스가 있었는데, 위처럼 했습니다. readDatas를 디버깅 상태에서 마우스를 올려보면, 아래처럼 표시됩니다.
{{ DapperRow, { "Colname": Data, ... }}
키, 밸류 방식이라 KeyValuePair 객체로 담아보려했으나, 실패. 실패를 거듭하다 위처럼 성공해서 사용 중입니다.
반응형
'개발 > C#' 카테고리의 다른 글
[2022.09] 맥 어드레스를 이용한 라이선스 기법 (0) | 2022.09.20 |
---|---|
[2022.09] Webhook API를 이용한 로깅기법 (0) | 2022.09.08 |
[2022.02] MSMQ를 이용해 프로세스 간 메시지 송/수신 처리하기 (0) | 2022.02.22 |
[2021.09] fo-DICOM Log4Net 사용방법 (0) | 2021.09.06 |
[2021.09] 입력문자가 어떤 언어인지 분별해주는 함수 (0) | 2021.09.04 |