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
반응형
'스마트한 개발 공부 > WinForm' 카테고리의 다른 글
[WinForm] 레지스트리 / app.config / user.config 에 값 저장하기 (1) | 2021.10.18 |
---|