C#,Delphi,Oracle,MSSQL 개발자블로그

C#에서 저장 프로시저 호출 본문

Programming/C#

C#에서 저장 프로시저 호출

19760323 2017. 3. 12. 18:37

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


Comments