스마트한 개발 공부/WinForm

[C# Winform] C# 프로그램에서 DB연동하기

스마트한지노 2021. 9. 14. 16:24
728x90
반응형

아래 예시는 MySQL에 있는 DB에서 데이터를 가져와서 Winform과 연동하는 방법이다. 

1. app.config 파일에 <connectionStrings> 섹션을 추가하고 DB 연결 정보를 저장한다.

<connectionStrings>
<add name="DB이름" connectionString="server=127.0.0.1;port=3306;uid=root;pwd=1234;database=SQL에서 가져올 db이름"/>
</connectionStrings>

* 직접 타이핑을 하기 보다는 자동기능을 이용하는 게 좋다. config 파일에서 오류가 나면 오류를 찾기가 어렵다. 

2. 프로젝트에서 참조추가 (어셈블리탭 : System.Configuration.dll / 확장탭: Mysql.Data.dll)

3. 폼별로 참조 지시문 추가

using System.Configuration; 
using MySql.Data.MySqlClient;

4. 전역변수 추가

string 변수명 = ConfigurationManager.ConnectionStrings["DB이름"].ConnectionString;

 

5. Method안에 DB 연결 관련 코드 추가

MySqlConnection conn = new MySqlConnection(변수명);             
conn.Open();
MessageBox.Show("DB연결성공"); // 연결확인용
conn.Close();

DBMS에 따라서 Connection Object를 생성해준다. 

6. usedDB에서 조건에 맞는 데이터 가져오기

MySqlConnection conn = new MySqlConnection(userDB);
conn.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = @"select name, age, address
from userDB
where name ="홍길동";";
MySqlDataReader reader = cmd.ExecuteReader(); 
while(reader.Read() == true)
{
     txtname.Text = reader["name"].ToString();
     txtage.Text = reader["age"].ToString();
     txtaddress.Text = reader["address"].ToString();
     
     //DB table의 column명으로도 데이터를 가져올 수 있고 순서대로 0부터 index로 가져올 수도 있다. 
     //txtname.Text = reader[0].ToString();
     //txtage.Text = reader[1].ToString();
     //txtaddress.Text = reader[2].ToString();
}
conn.Close();

SQL에서 조건문을 주는 방법은 Command를 사용하는 것이다. 이것도 DBMS에 맞춰서 코드를 작성한다. DBMS에 맞는 Command 객체를 생성한 뒤에 Connection으로 명령을 보낼 DB를 지정해준다.

cmd.CommandText = @"select name, age, address
from userDB
where name ="홍길동";";

cmd.CommandText = "실행할 쿼리문"을 넣어주면 된다. SQL에서 실행이 되는지 먼저 확인을 한 뒤에, 해당 코드를 그대로 복사해서 붙여 넣으면 된다. Query문 뒤에 세미콜론(;)은 생략해도 된다. Query문 앞의 @표시는 해당 문자열을 문자 그대로 인식하도록 한다.

MySqlDataReader reader = cmd.ExecuteReader(); 
//cmd.ExecuteNonQuery()  result set이 없는 경우, 행 수를 return한다.

Command로 만든 객체에 ExecuteReader() 명령어를 준걸 MySqlDataReader 객체로 받으면 된다. 이렇게 하면 SQL의 resultset을 dataReader로 가리킨다.

  • resultset이 있으면 ExecuteReader()를 사용한다. 
  • resultset이 없는 경우에는 ExecuteNonQuery()를 사용한다. ExecuteNonQuery()는 행 수를 return한다.
reader.Read()

dataReader로 만들어진 객체는 반환타입이 bool타입이다. 즉, 읽을 게 있는지 없을지를 return 하게 된다.  dataReader의 Read() 함수는 SQL의 resultset의 첫 줄부터 하나씩 읽어온다. 그렇기 때문에 1개 이상의 데이터를 모두 읽어오려면 while문으로 한 줄씩 읽어오면 된다. 

728x90
반응형