C#,Delphi,Oracle,MSSQL 개발자블로그
C#에서 저장 프로시저 호출 본문
C#에서 저장 프로시저를 호출하는 방법을 공부해본다. 드라이버는 Oledb를 사용했다.
순서를 보면,
1. Command 를 선언하고,
OleDbCommand cmd = new OleDbCommand();
2. Command 에 커넥션을 연결하고,
cmd.Connection = conn(커넥션);
3. Command 타입을 설정하고,
cmd.CommandType = CommandType.StoredProcedure;
4. Command 에 프로시저명을 설정하고,
cmd.CommandText = "프로시저명";
5. Command 에 인 파라미터를 설정하고 실행한다.
OleDbParameter pin1 = new OleDbParameter("id", OleDbType.VarChar);
pin1.Value = "아이디";
cmd.Parameters.Add(pin1);
6. Command 에 아웃 파라미터가 있다면 설정한다. (없으면 생략)
OleDbParameter pout1 = new OleDbParameter("RESULT", OleDbType.VarChar, 1);
cmd.Parameters.Add(pout1).Direction = ParameterDirection.Output;
7. 이부분이 처음에 삽질하던 부분이다. 쿼리가 SELECT문이라면 주로 ExecuteReader 를 사용해 결과를 받아온다.
하지만 아웃 파라미터값을 받고 싶다면 그전에 무조건 ExecuteNonQuery 를 실행해야만 값을 받을 수 있다.
주의할 점은 ExecuteNonQuery 를 먼저실행하고 값을 받은 다음에 ExecuteReader를 실행해야 한다는 뜻이다.
cmd.ExecuteNonQuery();
string out1 = pout1.Value.ToString();
string out2 = pout2.Value.ToString();
OleDbDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
.......생략......
}
위에서 설명한 내용을 예제로 만들어본게 아래의 내용이다.
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SP_LOG_IN";
OleDbParameter pin1 = new OleDbParameter("id", OleDbType.VarChar);
pin1.Value = "아이디";
cmd.Parameters.Add(pin1);
OleDbParameter pin2 = new OleDbParameter("pw", OleDbType.VarChar);
pin2.Value = "패스워드";
cmd.Parameters.Add(pin2);
OleDbParameter pout1 = new OleDbParameter("RESULT", OleDbType.VarChar, 1);
cmd.Parameters.Add(pout1).Direction = ParameterDirection.Output;
OleDbParameter pout2 = new OleDbParameter("ERROR_MSG", OleDbType.VarChar, 30);
cmd.Parameters.Add(pout2).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
string out1 = pout1.Value.ToString();
string out2 = pout2.Value.ToString();
OleDbDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
.....생략.......
}
출처 : http://blog.naver.com/PostView.nhn?blogId=skh6938&logNo=150113068571
'Programming > C#' 카테고리의 다른 글
C# 원하는 길이로 좌측/우측 정렬시킨후 나머지 공간을 다른 문자로 채우기(pad) (0) | 2017.03.12 |
---|---|
스레드 다루기 - 1. 스레드의 개념이해 (0) | 2017.03.12 |
C# DateTime 날짜 관련 클래스 (0) | 2017.03.12 |
VS [제약조건과 일치하는 올바른 내보내기를 찾을 수 없습니다.] 해결방법. (0) | 2017.03.11 |
[C#]텍스트파일에 쓰기/읽기/수정/삭제하기. (0) | 2017.01.27 |