728x90
반응형
728x170
▶ 테이블 생성 스크립트
DROP TABLE SCOTT."USER";
CREATE TABLE SCOTT."USER"
(
"ID" VARCHAR(20) NOT NULL,
"NAME" VARCHAR(20),
"ROLE" VARCHAR(50),
PRIMARY KEY (ID)
);
INSERT INTO SCOTT."USER" VALUES ('001', '홍길동', 'User' );
INSERT INTO SCOTT."USER" VALUES ('002', '김철수', 'User, Administrator');
COMMIT;
728x90
▶ Role.cs
using System;
namespace TestProject
{
/// <summary>
/// 역할
/// </summary>
[Flags]
public enum Role
{
/// <summary>
/// 해당 무
/// </summary>
None = 0,
/// <summary>
/// 관리자
/// </summary>
Administrator = 0x1,
/// <summary>
/// 사용자
/// </summary>
User = 0x2
}
}
300x250
▶ UserModel.cs
using System;
namespace TestProject
{
/// <summary>
/// 사용자 모델
/// </summary>
public class UserModel
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region ID - ID
/// <summary>
/// ID
/// </summary>
public string ID { get; set; }
#endregion
#region 성명 - NAME
/// <summary>
/// 성명
/// </summary>
public string NAME { get; set; }
#endregion
#region 역할 - ROLE
/// <summary>
/// 역할
/// </summary>
public Role ROLE { get; set; }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 역할 구하기 - GetRole(value)
/// <summary>
/// 역할 구하기
/// </summary>
/// <param name="value">값</param>
/// <returns>역할</returns>
public static Role GetRole(string value)
{
if(string.IsNullOrWhiteSpace(value))
{
return Role.None;
}
string[] valueItemArray = value.Split(',');
Role role = Role.None;
int valueItemArrayLength = valueItemArray.Length;
for(int i = 0; i < valueItemArrayLength; i++)
{
string valueItem = valueItemArray[i];
if(i == 0)
{
role = (Role)Enum.Parse(typeof(Role), valueItem);
}
else
{
role |= (Role)Enum.Parse(typeof(Role), valueItem);
}
}
return role;
}
#endregion
}
}
▶ RoleTypeHandler.cs
using System.Data;
using Dapper;
namespace TestProject
{
/// <summary>
/// 역할 타입 핸들러
/// </summary>
public class RoleTypeHandler : SqlMapper.TypeHandler<Role>
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 파싱하기 - Parse(value)
/// <summary>
/// 파싱하기
/// </summary>
/// <param name="value">값</param>
/// <returns>역할</returns>
public override Role Parse(object value)
{
return UserModel.GetRole(value.ToString());
}
#endregion
#region 값 설정하기 - SetValue(parameter, value)
/// <summary>
/// 값 설정하기
/// </summary>
/// <param name="parameter">매개 변수</param>
/// <param name="value">값</param>
public override void SetValue(IDbDataParameter parameter, Role value)
{
parameter.Value = value.ToString();
}
#endregion
}
}
▶ Program.cs
using System;
using System.Linq;
using Oracle.ManagedDataAccess.Client;
using Dapper;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
string connectionString = @"Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = orcl)));User ID=SYSTEM;Password=P@ssw0rd";
SqlMapper.AddTypeHandler(new RoleTypeHandler());
using(OracleConnection connection = new OracleConnection(connectionString))
{
var resultList = connection.Query<UserModel>("SELECT * FROM SCOTT.\"USER\"").ToList();
foreach(var item in resultList)
{
Console.WriteLine(item.ROLE);
}
}
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > Dapper' 카테고리의 다른 글
[C#/DAPPER] 누겟 설치 : Dapper (0) | 2020.09.29 |
---|---|
[C#/DAPPER] SqlMapper 클래스 : GetRowParser 확장 메소드를 사용해 제네릭 타입 데이터의 .CSV 파일 생성하기 (0) | 2020.04.25 |
[C#/DAPPER] CustomPropertyTypeMap 클래스 : 커스텀 컬럼 매핑 사용하기 (0) | 2020.02.03 |
[C#/DAPPER] IDbConnection 클래스 : QueryMultiple 확장 메소드를 사용해 2개 이상의 SELECT문 조회하기 (0) | 2020.02.02 |
[C#/DAPPER] SYS_REFCURSOR 출력 타입의 입력 매개 변수를 갖는 오라클 저장 프로시저 호출하기 (0) | 2020.02.02 |
[C#/DAPPER] NULLABLE DATETIME 사용시 처리하기 (0) | 2017.10.07 |
[C#/DAPPER] 부모 객체를 포함해 조회하기 (0) | 2017.06.26 |
[C#/DAPPER] 자식 리스트를 포함해 조회하기 (0) | 2017.06.26 |
[C#/DAPPER] IN 조건문 조회하기 (0) | 2016.08.30 |
[C#/DAPPER] COUNT 집계 함수 사용하기 (0) | 2016.05.22 |
댓글을 달아 주세요