37. [ADO.NET] SqlParameter 사용 예(저장 프로시저를 이용하여 도서 추가)

 이번에는 저장 프로시저를 이용하는 예를 들어보기로 할게요. 먼저 도서를 추가하는 저장 프로시저를 만듭니다.

CREATE PROCEDURE dbo.AddBook
(
    @ISBN  varchar(50),
    @Title varchar(50),
    @Author varchar(50),
    @Price int,
    @Result int OUTPUT
)
AS
    begin
        set @Result = 0
        select @Result = count(*) from Books where (ISBN=@ISBN)
                           if @Result = 0
        begin
            insert Books values(@Title,@Price,@Author,@ISBN)
            set @Result = 1
        end
    end
RETURN

  저장 프로시저를 실행하려면 SqlCommand의 CommandType 속성을 StoredProcedure로 설정해야 합니다.

command.CommandType = System.Data.CommandType.StoredProcedure;

 AddBook 저장 프로시저를 보면 @Result 인자는 인자 유형이 OUTPUT으로 되어 있기 때문에 파라미터의 방향을 Output으로 설정해야 합니다.

SqlParameter param_result = new SqlParameter();
param_result.Direction = System.Data.ParameterDirection.Output;
param_result.ParameterName = "@Result";
param_result.SqlDbType = System.Data.SqlDbType.Int;
command.Parameters.Add(param_result);

 다음은 저장 프로시저를 이용하여 도서를 추가하는 소스 코드입니다.

static void Main(string[] args)
{
    AddBook(".NET  플랫폼", 15000, "홍길동", "9224764583");
    AddBook("CSharp", 18000, "홍길동", "9228964583");
}
 
private static void AddBook(string title, int price, string author, string isbn)
{
    string comtext = "AddBook";
    string constr = @"Data Source=[서버 이름];Initial Catalog=[DB 명]; User ID=[ID];Password=[PW]";
 
    SqlConnection scon = new SqlConnection(constr);
    SqlCommand command = new SqlCommand(comtext, scon);
    command.CommandType = System.Data.CommandType.StoredProcedure;
 
    SqlParameter param_title = new SqlParameter("@Title", title);
    command.Parameters.Add(param_title);
 
    SqlParameter param_price = new SqlParameter();
    param_price.ParameterName = "@Price";
    param_price.SqlDbType = System.Data.SqlDbType.Int;
    param_price.Value = price;
    command.Parameters.Add(param_price);
 
    SqlParameter param_author = new SqlParameter("@Author", author);
    command.Parameters.Add(param_author);
 
    SqlParameter param_isbn = new SqlParameter("@ISBN", isbn);
    command.Parameters.Add(param_isbn);
 
    SqlParameter param_result = new SqlParameter();
    param_result.Direction = System.Data.ParameterDirection.Output;
    param_result.ParameterName = "@Result";
    param_result.SqlDbType = System.Data.SqlDbType.Int;
    command.Parameters.Add(param_result);
 
 
    scon.Open();
    command.ExecuteNonQuery();
    int result = (int)param_result.Value;
    if (result == 1)
    {
        Console.WriteLine("{0} 도서추가 성공", title);
    }
    else
    {
        Console.WriteLine("{0} 도서추가 실패", title);
    }           
    scon.Close();
}