프로그래밍/C#

[C#] MSSQL 저장프로시저 사용하기

ss-pro 2022. 12. 26. 22:49
반응형

MSSQL저장프로시저를 호출하여 데이터 처리하는 방법에 대해 알아보겠습니다. 

1. MSSQL 저장프로시저 생성 
먼저 MSSQL서버에서 아래와 같이 데이터를 Insert처리하는 uspAddUser라는 프로시저와 데이터를 Select하는 uspSearchUser라는 프로시저를 샘플로 만들어서 테스트 하겠습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- 데이터 저장
CREATE PROCEDURE uspAddUser
(
    @id int,
    @name varchar(30)
)
AS
BEGIN
    SET NOCOUNT ON;
 
    INSERT INTO UserInfo (id,name) values (@id, @name);
END
GO
 
-- 데이터조회
CREATE PROCEDURE uspSearchUser
AS
BEGIN
    SET NOCOUNT ON;
 
    select * from UserInfo 
END
GO

2. 데이터 저장(Insert)
아래 전체소스의 InsertDbStoreProcedure부분을 참고하여 진행합니다. SqlConnection개체를 이용하여 DB연결을 합니다. SqlCommand개체를 이용하여 프로시저명을 선언하고 CommandType을 StoredProcedure선택합니다.SqlParameter개체를 이용하여 저장하고싶은 Input데이터를 할당하고, SqlCommand개체의 ExecuteNonQuery함수를 호출하여 데이터를 저장합니다. 

3. 데이터 조회(Select)
아래 전체소스의  GetUserInfoStoreProcedure 부분 참고하여 진행.Insert하는 부분과 처리수순의 거의 비슷하며 저장프로시저 호출 결과값에 SqlDataAdapter를 이용하여 메모리 데이터개체 DataSet에 할당하여 결과를 반환처리합니다. 반환된 DateSet을 DataGridView의 DataSource에 연결해주면 조회결과를 화면상에 표출 할 수 있습니다. 

전체소스 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace MssqlTestProject
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void InsertDbStoreProcedure(int id, string name)
        {
            string connectString = string.Format("Server={0};Database={1};Uid ={2};Pwd={3};"
"127.0.0.1""sampledb""test""1234!");
 
            using (SqlConnection conn = new SqlConnection(connectString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand("uspAddUser", conn);
                cmd.CommandType = CommandType.StoredProcedure;
 
                //Input Parameters
                SqlParameter inputID = new SqlParameter("@id", SqlDbType.Int);
                inputID.Value = id;
                cmd.Parameters.Add(inputID);
 
                SqlParameter inputName = new SqlParameter("@name", SqlDbType.VarChar, 30);
                inputName.Value = name;
                cmd.Parameters.Add(inputName);
 
                //프로시저실행
                cmd.ExecuteNonQuery();
            }
        }
 
        private DataSet GetUserInfoStoreProcedure()
        {
            string connectString = string.Format("Server={0};Database={1};Uid ={2};Pwd={3};"
"127.0.0.1","sampledb""test""1234!");
            DataSet ds = new DataSet();
 
            using (SqlConnection conn = new SqlConnection(connectString))
            {
                conn.Open();
 
                SqlCommand cmd = new SqlCommand("uspSearchUser", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
            }
            return ds;
        }
 
        private void btnSearch_Click(object sender, EventArgs e)
        {
            DataSet ds = GetUserInfoStoreProcedure();
            dataGridView1.DataSource = ds.Tables[0];
        }
 
        private void btnAdd_Click(object sender, EventArgs e)
        {
           InsertDbStoreProcedure(Int32.Parse( txtID.Text), txtName.Text.Trim());
            MessageBox.Show("등록되었습니다.");
        }
    }
}