본문 바로가기

C#

.Net 애플리케이션에서 스토어드 프로시저 호출(DB2Connection 클래스)

728x90

1. 대상 데이터베이스에 대한 연결을 작성하십시오. 데이터베이스 연결을 설정하는 단계는 각자 DB에 맞춰서,,

2. DB2Command 오브젝트를 작성하고 CommandType 특성을 CommandType.StoredProcedure 또는 CommandType.Text로 설정하십시오. CommandType 특성의 기본값은 CommandType.Text입니다. CommandType.Text 값을 사용하여 스토어드 프로시저를 호출할 수 있습니다. 하지만 CommandType 특성을 CommandType.StoredProcedure로 설정하면 더 쉽게 스토어드 프로시저를 호출할 수 있습니다.
CommandType.StoredProcedure 오브젝트를 사용하여 스토어드 프로시저를 호출하는 경우에는 스토어드 프로시저와 연관된 스토어드 프로시저 이름 및 매개변수를 지정해야 합니다. 서로 다른 스키마에 동일한 이름 및 매개변수를 가진 스토어드 프로시저가 존재할 수 있습니다. 올바르지 않은 스토어드 프로시저의 호출을 방지하려면 올바른 스키마 이름으로 스토어드 프로시저 이름을 완전히 규정하삽시오.

// CommandType.Text 오브젝의 예
// CommandType 특성이 CommandType.Text이면 CALL 및 EXECUTE PROCEDURE 문이 모두 지원됩니다.

Command cmd = conn.CreateCommand();
String procCall = "CALL TEST_PROC (@input_param1)";
cmd.CommandType = CommandType.Text;
cmd.CommandText = procCall;
// CommandType.StoredProcedure 오브젝트의 예
// CommandType 특성이 CommandType.StoredProcedure인 경우 이름 지정된 매개변수는 지원되지 않습니다.

Command cmd = conn.CreateCommand();
String procName = "TEST_PROC";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = procName;

3. IN, INOUT 및 OUT 매개변수에 해당하는 DB2Command.Parameters 오브젝트를 작성하십시오. 스토어드 프로시저 매개변수에 매개변수 표시문자를 사용하는 경우 DB2Parameter 오브젝트를 작성하고 Add 메소드를 사용하여 DB2Parameter 오브젝트를 DB2Command.Parameters 오브젝트에 바인드하십시오.

DB2Parameter p1 = new DB2Parameter(“input_param1”, DB2Type.Integer);
p1.Value = 123;
db2Command.Parameters.Add(p1);

스토어드 프로시저 매개변수를 호스트 변수, 이름 지정된 매개변수 또는 위치 지정된 매개변수와 함께 전달할 수 있습니다. 하지만 서로 다른 메소드를 사용하여 동일한 SQL문의 스토어드 프로시저 매개변수를 전달할 수는 없습니다. 다음 C# 코드 예와 같이 매개변수 이름에 의해 규정된 경우에는 순서에 관계없이 매개변수를 스토어드 프로시저에 전달할 수 있습니다.

CREATE PROCEDURE schema.my_proc ( IN var1 int, INOUT var2 int )
	LANGUAGE SQL
	BEGIN
		-- procedure code here
	END

String procCall = "CALL my_proc (var2=>@param2, var1=>@param1");

ARRAY 데이터 유형을 OUT 및 INOUT 매개변수에는 지원되지 않습니다. ARRAY 길이 값은 각 ARRAY 매개변수에 대해 DB2Parameter.ArrayLength 오브젝트에서 지정되어야 합니다.

Int32 integerArray = new Int32[] { 12, 34, 45, 67 };
DB2Parameter p1 = new DB2Parameter(“input_param1”, Type.Integer);
p1.Value = integerArray;
p1.ArrayLength = 3;
db2Command.Parameters.Add(p1);

[출처]

https://www.ibm.com/docs/ko/db2/11.1?topic=net-calling-stored-procedures-from-applications

728x90