기존 crud에서 insert 구문을 프로시저를 이용해서 저장이 가능하게 변경하자
저장 프로시저를 추가하기 위해
mssql을 켜서 db - 프로그래밍 기능 - 저장 프로시저 - 새 저장 프로시저를 생성한다
상단에 저자, 생성일, 내용등을 적어주고
사용할 변수들을 @붙여서 정의
begin 구문 안에
프로시저로 호출할 쿼리문을 작성한다
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: hoshi03
-- Create date: 2024.10.06
-- Description: <신규 책 추가 프로시저>
-- =============================================
CREATE PROCEDURE InsertBooks
@BOOKNO varchar(20),
@BOOKNAME varchar(50),
@BOOKCODE varchar(50)
AS
BEGIN
-- set nocount를 해 두면 반영된 쿼리 줄이 출력되지 않음, 쿼리문 속도 향상
SET NOCOUNT ON;
INSERT BOOKS
(
BOOKNO
,NAME
,CODE
)
VALUES
(
@BOOKNO, @BOOKNAME, @BOOKCODE
);
END
GO
만들어둔 insertBOOKS 프로시저를 이용해서 삽입을 실행하는 방식으로 저장 프로시저를 사용했다
private void button3_Click(object sender, EventArgs e)
{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
string bookNo = textBox6.Text;
string bookName = textBox5.Text;
string bookCode = textBox7.Text;
// 저장 프로시저를 가져오고 파라미터 입력해서 실행
SqlCommand command = new SqlCommand("InsertBOOKS", sqlConnection);
command.CommandType = CommandType.StoredProcedure;
SqlParameter p1 = new SqlParameter("@BOOKNO", SqlDbType.VarChar);
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");
button4_Click(null, null);
}
}
• 저장 프로시저를 사용하는 이유
저장 프로시저는 한번만 컴파일되고 필요할 때 호출하면 되기에 쿼리 최적화, 트래픽이 감소되고
재사용성, 보안, 로직분리, 무결성, 트랜잭션 관리 등에서 많은 이점이 잇다
쿼리문을 날리는 방법이 복잡해지지만 사용할 수 있게 잘 익혀두자
'C# > 윈폼' 카테고리의 다른 글
프로그램 배포 (0) | 2024.10.06 |
---|---|
윈폼 CRUD (0) | 2024.09.25 |
mssql 윈폼 연동 (2) | 2024.09.25 |
사용자 정의 컨트롤러 (0) | 2024.09.21 |
단일 프로세스 (0) | 2024.09.21 |