728x90
솔루션 탐색기에서 우클릭 → 추가 → 새 프로젝트를 클릭합니다.
클래스 라이브러리(.NET Framework)를 선택하고 다음버튼을 클릭합니다.
라이브러리 이름을 작성하고 만들기버튼을 클릭합니다.
먼저 데이터베이스 조회, 삭제, 수정, 삽입에 대한 라이브러리를 만들어보겠습니다.
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary1
{
public class Class1
{
private SqlConnection conn = null;
private string connStr = "";
public void setConnStr(string str)
{
connStr = str;
}
//조회, 삭제 수정
public DataSet requestExcuteNonQuery(string query)
{
DataSet ds = new DataSet();
//조회 부분
if (query.Trim(' ').Substring(0, 3).Equals("sel"))
{
using (SqlConnection conn = new SqlConnection(connStr))
{
//conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(query, conn);
adapter.Fill(ds);
}
return ds;
}
//수정, 삭제, 삽입 -> 리턴타입이 없음
else
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand command = new SqlCommand();
command.Connection = conn;
command.CommandText = query;
command.ExecuteNonQuery();
}
return null;
}
}
/// <summary>
/// 프로시저 호출함수(공통)
/// </summary>
/// <param name="procedureName"></param>
/// <param name="dc"></param>
public void requestProcedure(string procedureName,Dictionary<string,string> dc)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand command = new SqlCommand(procedureName, conn);//매개변수로는 프로시저이름, sqlconnection 객체명이 들어간다.
command.CommandType = CommandType.StoredProcedure;
//Dictionary 사용
foreach(var a in dc)
{
SqlParameter parameter = new SqlParameter(a.Key, SqlDbType.VarChar); // 프로시저의 파라미터 이름, DB타입
parameter.Direction = ParameterDirection.Input;// 저장 프로시저에 들어가는 값 -> 입력값이 들어간다.
parameter.Value = a.Value;
command.Parameters.Add(parameter);
Console.WriteLine("key:" + a.Key + ",value:" + a.Value);
}
command.ExecuteNonQuery();
Console.WriteLine("프로시저 호출 : insertBOOKS");
}
}
}
}
만든 라이브러리를 사용하려면 참조 추가를 해야합니다.
솔루션 탐색기 → 참조 우클릭 → 참조 추가버튼을 클릭합니다.
프로젝트 -> 본인이 만든 라이브러리를 체크하고 확인버튼을 클릭합니다.
솔루션 탐색기에 올라온 것을 확인할 수 있습니다.
만약에 참조에 나타나지 않는다면 Ctrl+ Shift + B를 눌러 빌드를 합니다.
라이브러리를 사용해서 쿼리문을 불러오기 위해 Form1.cs 코드를 수정합니다.
using ClassLibrary1;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace book
{
public partial class Form1 : Form
{
private Class1 cls1 = new Class1(); //클래스 라이브러리의 Class1 클래스를 불러온다.
private SqlConnection conn = null;
private string connStr = "SERVER=" + ConfigurationManager.AppSettings["IP"] + "," + ConfigurationManager.AppSettings["PORT"] + ";DATABASE="
+ ConfigurationManager.AppSettings["DBNAME"] + ";UID=" + ConfigurationManager.AppSettings["UID"] + ";PASSWORD=" + ConfigurationManager.AppSettings["PWD"] + ";";
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 데이터 베이스 연결
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
try
{
conn = new SqlConnection(connStr);
conn.Open();
//MessageBox.Show("데이터베이스 연결 성공");
Console.WriteLine("데이터베이스 연결 성공");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Console.WriteLine("데이터베이스 연결 실패"+ex.Message);
}
}
/// <summary>
/// 데이터베이스 연결 해제
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
try
{
//null이 아니라면 버튼1 클릭이 실행된 것을 의미 -> 데이터베이스 연결됨
if (conn != null)
{
//데이터 베이스 연결 끊기
conn.Close();
MessageBox.Show("데이터 베이스 연결 해제");
Console.WriteLine("데이터 베이스 연결 해제");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Console.WriteLine("오류 발생"+ex.Message);
}
}
/// <summary>
/// 데이터 전체 조회
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button6_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
ds = cls1.requestExcuteNonQuery("select * from BOOKS(NOLOCK)");
dataGridView1.DataSource = ds.Tables[0];
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells["BOOKNO"].Value.ToString(); //dataGridView1의 행에서 cell이름(데이터 베이스 컬럼명)이 BOOKNO인 값을 가져온다.
textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells["NAME"].Value.ToString();
textBox4.Text = dataGridView1.Rows[e.RowIndex].Cells["BOOKNO"].Value.ToString();
}
private void button3_Click(object sender, EventArgs e)
{
string bookNo = textBox1.Text;
cls1.requestExcuteNonQuery("delete from BOOKS where BOOKNO=" + bookNo);
button6_Click(null, null);
}
private void button4_Click(object sender, EventArgs e)
{
string bookNo = textBox4.Text;
string bookName = textBox3.Text;
cls1.requestExcuteNonQuery("update BOOKS set NAME='" + bookName + "' where BOOKNO=" + bookNo);
button6_Click(null, null);
}
private void button5_Click(object sender, EventArgs e)
{
string bookNo = textBox6.Text;
string bookName = textBox5.Text;
string bookCode = textBox7.Text;
//프로시저 호출할 때 Dictionary를 사용
Dictionary<string,string> dc = new Dictionary<string,string>(); //C#에서 Dictionary는 자바의 Hashmap과 유사함 -> generic 부분은 key,value //파라미터가 유동적이기 때문에 Dictionary를 사용
dc.Add("@BOOKNO", bookNo);
dc.Add("@BOOKNAME", bookName);
dc.Add("@BOOKCODE", bookCode);
cls1.requestProcedure("insertBOOKS", dc);
button6_Click(null, null);
}
private void Form1_Load(object sender, EventArgs e)
{
cls1.setConnStr("SERVER=" + ConfigurationManager.AppSettings["IP"] + "," + ConfigurationManager.AppSettings["PORT"] + ";DATABASE="
+ ConfigurationManager.AppSettings["DBNAME"] + ";UID=" + ConfigurationManager.AppSettings["UID"] + ";PASSWORD=" + ConfigurationManager.AppSettings["PWD"] + ";");
}
}
}
코드가 훨씬 간단해지는 것을 볼 수 있습니다.
'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 |