mssql에 기존에 만들어둔 test 스키마에 books 테이블 추가하고 책 데이터 넣어주기
CREATE TABLE
BOOKS (
BOOKNO int PRIMARY KEY,
NAME varchar(50),
CODE varchar(50)
);
INSERT INTO
BOOKS (BOOKNO, NAME, CODE)
VALUES
(1, '아기돼지3형제', '111111');
INSERT INTO
BOOKS (BOOKNO, NAME, CODE)
VALUES
(2, '톰과제리', '111112');
INSERT INTO
BOOKS (BOOKNO, NAME, CODE)
VALUES
(3, '인어공주', '111113');
INSERT INTO
BOOKS (BOOKNO, NAME, CODE)
VALUES
(4, '미녀와야수', '111114');
윈폼 ui 꾸며서 조회될 것 만들어주기
왼쪽에 datagridview 오른쪽은 CRUD시 선택한 책 관련 정보가 나오는 ui로 구성했다
• 조회기능
전에 연결해둔 db에 쿼리를 날리고 결과를 sqladapter로 가져와서 데이터그리디뷰의 소스로 넣어준다
sqladapter / sqlReader 두가지 방식으로 데이터를 읽어올 수 있는데
어댑터는 비연결, 유저 메모리 부담
리더는 연결된 상태, 서버가 접속을 유지하는 방식
대부분 어댑터를 사용한다고한다
• sqlAdapter를 사용한 조회쿼리
private void button4_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
//using 구문 내부에서만 db와 연결되서 동작하고 using 구문을 벗어나면 close() 메서드로 연결을 끊은 것과 동일하게 동작한다
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
//단순 조회의 경우에는 락을 해제해서 사용했다
string selectQuery = "SELECT * FROM BOOKS(NOLOCK)";
//sqladpater를 사용해서 자동으로 연결 후, 쿼리 실행, 연결 끊기
SqlDataAdapter adapter = new SqlDataAdapter(selectQuery, sqlConnection);
adapter.Fill(ds, "BOOKS");
}
//데이터소스 채워주기
dataGridView1.DataSource = ds.Tables[0];
}
• sqlReader를 사용한 조회쿼리
sqlReader를 사용할때는 sqlConnection을 명시적으로 열어주고
sqlcommand를 작성한 후에 sqlReader를 command.ExecuteReader로 설정한다
// 데이터 전체조회
private void button4_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
//using 구문 내부에서만 db와 연결되서 동작하고 using 구문을 벗어나면 close() 메서드로 연결을 끊은 것과 동일하게 동작한다
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
//단순 조회의 경우에는 락을 해제해서 사용했다
string selectQuery = "SELECT * FROM BOOKS(NOLOCK)";
//sqlreader 사용 방식
sqlConnection.Open();
DataTable dt = new DataTable();
SqlCommand command = new SqlCommand();
command.CommandText = selectQuery;
command.Connection = sqlConnection;
SqlDataReader sqlDataReader = command.ExecuteReader();
dt.Load(sqlDataReader);
dataGridView1.DataSource = dt;
}
////데이터소스 채워주기
//dataGridView1.DataSource = ds.Tables[0];
}
• 데이터그리드뷰에서 선택한 행 정보 가져오기
데이터그리드뷰 속성 - 이벤트 - cellclick으로 해당 셀을 클릭했을때 발생할 이벤트를 추가할 수 있다
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
//db에서 해당 행의 특의 도메인을 가져오는 쿼리
string bookNo = dataGridView1.Rows[e.RowIndex].Cells["BOOKNO"].Value.ToString();
string bookName = dataGridView1.Rows[e.RowIndex].Cells["NAME"].Value.ToString();
textBox1.Text = bookNo;
textBox4.Text = bookNo;
textBox2.Text = bookName;
}
이렇게 특정 행의 정보를 가져온 다음, 해당 정보를 바탕으로 수정,삭제,변경 쿼리를 작성해보자
• 삭제 쿼리
sqlcommand에 cell클릭으로 가져온 정보를 넣은 쿼리문을 넣고 executeNonquery 메서드로 쿼리문을 실행한다
폼에 쿼리 내역을 반영하기 위해서 실행 후 전체조회 메서드를 호출해준다
//삭제
private void button1_Click(object sender, EventArgs e)
{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
string bookNo = textBox1.Text;
string selectQuery = "DELETE FROM BOOKS WHERE BOOKNO = " + bookNo;
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = selectQuery;
sqlCommand.ExecuteNonQuery();
//실행 후 전체조회 이벤트 발생해서 테이블 갱신시켜주기
button4_Click(null, null);
}
}
나머지도 비슷한 형식이다
//업데이트
private void button2_Click(object sender, EventArgs e)
{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
string bookNo = textBox4.Text;
string selectQuery = "UPDATE BOOKS SET NAME = '" + textBox3.Text + "' WHERE BOOKNO = " + bookNo;
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = selectQuery;
sqlCommand.ExecuteNonQuery();
//실행 후 전체조회 이벤트 발생해서 테이블 갱신시켜주기
button4_Click(null, null);
}
}
//추가
private void button3_Click(object sender, EventArgs e)
{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
string bookNo = textBox6.Text;
string selectQuery = "INSERT INTO BOOKS VALUES(" +textBox6.Text +",'" + textBox5.Text +"','"
+ textBox7.Text + "')";
//MessageBox.Show(selectQuery);
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.CommandText = selectQuery;
sqlCommand.Connection = sqlConnection;
sqlCommand.ExecuteNonQuery();
//실행 후 전체조회 이벤트 발생해서 테이블 갱신시켜주기
button4_Click(null, null);
}
}
}
'C# > 윈폼' 카테고리의 다른 글
프로그램 배포 (0) | 2024.10.06 |
---|---|
저장프로시저 (2) | 2024.10.06 |
mssql 윈폼 연동 (2) | 2024.09.25 |
사용자 정의 컨트롤러 (0) | 2024.09.21 |
단일 프로세스 (0) | 2024.09.21 |