[C#] 저장 프로시저 호출

728x90

1. 저장프로시저란?

저장 프로시저란 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합입니다.

 

이에 대해 위키백과에서는 아래와 같이 설명하고 있습니다.

저장 프로시저 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

저장 프로시저 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 저장 프로시저 또는 스토어드 프로시저(stored procedure)는 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. 데이터베이스에 대한 일련의 작

ko.wikipedia.org

 

 

 

1) 장점

쿼리문을 작성하는 것보다 저장프로시저를 사용하게 되면 소스코드와 분리되어 쿼리문을 관리하므로 유지보수성이

 

좋아집니다.

 

또한 직접 쿼리문을 작성하게 되면 문자열을 분석하여 쿼리문 하나하나를 컴파일하지만 저장 프로시저를 사용하게 되면

 

처음 호출할 때 컴파일을 한번만 하므로 실행속도도 빨라진다고합니다.

2) 단점

프로시저는 db관리툴에서 관리하므로 코드에 대한 디버깅이 어렵습니다.

 

또한 상황에 따라서는 (문자나 숫자 연산 등) 오히려 성능이 떨어진다고 합니다.

 

2.저장프로시저 사용방법

1) 저장 프로시저 생성

SQL Management Studio를 실행합니다.

 

데이터베이스를 하나 만듭니다.

 

데이터베이스 → 프로그래밍 기능 →저장 프로시저 우클릭 → 새 저장 프로시저를 클릭합니다.

 

 

 

저장 프로시저에 삽입구문을 만들어보겠습니다.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		yj.code
-- Create date: 2023.12.11
-- Description:	신규 도서 추가
-- =============================================
CREATE PROCEDURE insertBOOKS
	@BOOKNO varchar(20),
	@BOOKNAME varchar(50),
	@BOOKCODE varchar(50)
AS
BEGIN
	
	SET NOCOUNT ON; -- 반영된 행의 개수를 표시해 주지않음 -> 쿼리 실행속도 증가

    insert into BOOKS
	(
	BOOKNO,
	NAME,
	CODE
	)
	values
	(
	@BOOKNO,
	@BOOKNAME,
	@BOOKCODE
	);
	
END
GO

 

쿼리문을 입력하고 실행버튼을 누르면 저장프로시저가 추가됩니다.

 

2) 저장 프로시저 호출

 

visual stuio를 실행합니다.

 

 

추가버튼을 클릭하면 저장 프로시저를 불러와 삽입되는 기능을 구현하겠습니다.

 

추가버튼 클릭 메서드에 아래코드를 추가합니다.

 

string bookNo = textBox6.Text;
string bookName = textBox5.Text;
string bookCode = textBox7.Text;

using (SqlConnection conn =  new SqlConnection(connStr))
{
    conn.Open();
    SqlCommand command = new SqlCommand("insertBOOKS",conn);//매개변수로는 프로시저이름, sqlconnection 객체명이 들어간다.
    command.CommandType = CommandType.StoredProcedure;

    SqlParameter p1 = new SqlParameter("@BOOKNO",SqlDbType.VarChar); // 프로시저의 파라미터 이름, DB타입
    p1.Direction = ParameterDirection.Input;// 저장 프로시저에 들어가는 값 -> 입력값이 들어간다.
    p1.Value = bookNo; 
    command.Parameters.Add(p1);

    SqlParameter p2 = new SqlParameter("@BOOKNAME", SqlDbType.VarChar);
    p2.Direction = ParameterDirection.Input;
    p2.Value = bookName;
    command.Parameters.Add(p2);

    SqlParameter p3 = new SqlParameter("@BOOKCODE", SqlDbType.VarChar);
    p3.Direction = ParameterDirection.Input;
    p3.Value = bookCode;
    command.Parameters.Add(p3);


    command.ExecuteNonQuery();
    Console.WriteLine("프로시저 호출 : insertBOOKS");

    button6_Click(null, null); //위 코드 실행 후 새로고침
}

 

 

기능이 정상적으로 작동하는 것을 확인할 수 있습니다.

'C# Programming > C#' 카테고리의 다른 글

[C#] 라이브러리 생성  (0) 2024.05.15
[C#] 디버깅 하는방법  (0) 2024.05.15
[C#] Timer  (0) 2024.05.15
[C#] 이벤트 게시 및 수신  (0) 2024.05.15
[C#] 비동기 프로그래밍  (0) 2024.05.15