이번에는 저장 프로시저를 이용하는 예를 들어보기로 할게요. 먼저 도서를 추가하는 저장 프로시저를 만듭니다.
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(); }