-
c#에서 mysql (MySqlCommand) 사용하기 예시프로그래밍/DB 2016. 11. 24. 21:22728x90반응형
c#에서 MySQL을 엑세스하기 위해서는 일반적으로 MySQL을 위한 ADO.NET 드라이버인 MySQL Connector/Net을 사용하는데, 이 MySQL Connector/Net은 MySQL 웹사이트에서 무료 다운 받아 설치할 수 있다. 드라이버를 설치한 후에 C# 프로젝트에서 MySql.Data.dll를 참조한 후 MySql.Data.MySqlClient 네임스페이스를 참조하면, MySQL버젼의 ADO.NET 클래스들 (예: MySqlConnection, MySqlCommand, MySqlDataReader 등)을 이용할 수 있다.
1. mysql connectin을 만든다. connection이 정상적으로 열리지 않을 경우 에러 메세지 출력
MySqlConnection conn = new MySqlConnection("SERVER=server ip or address(ex:kugancity.tistory.com);DATABASE=dbname;UID=user_id;PWD=password;");
try
{
// 데이터베이스를 open 한다.
conn.Open();
Console.WriteLine(string.Format("connection is '{0}'", conn.State));}
catch (Exception ex)
{
// 연결되지 못했거나, 오류가 발생하면 출력한다.
MessageBox.Show("can not open connection!");
string line = string.Format("{0},", ex);
MessageBox.Show(line);
}2. MySqlCommand 클래스 사용하여 데이터베이스 operation 작업하기
MysqlCommand object를 사용하여 데이터베이스 operation을 수행할 수 있습니다.
MysqlCommand object에서 자주 사용하는 세 가지 함수는 아래와 같습니다.
ExecuteReader - 데이터를 받아오는 쿼리문에 사용합니다. 데이터는 MySqlDataReader 라는 클래스의 객체로 리턴됩니다.
ExecuteNonQuery - 데이터 삽입/삭제 시 사용합니다.
ExecuteScalar - 하나의 값이 리턴되는 쿼리문에 사용합니다.
아래는 각 함수를 사용하는 예시들 입니다.
- 테이블 데이터 받아오기 (ExecuteReader 함수 사용)
MySqlDataReader 클래스는 SQL Server와 연결을 유지한 상태에서 한번에 한 레코드(One Row)씩 데이타를 가져오는데 사용됩니다. MySqlCommand.ExecuteReader()로부터 리턴되는 MySqlDataReader 객체는 (파일의 BOF와 같이) 첫 Row 이전에 포인터를 위치시키기 때문에 개발자는 MySqlDataReader의 Read()메서드를 써서 처음 Row로 이동해 주어야 합니다. MySqlDataReader는 하나의 Connection에 하나만 Open되어 있어야 하며, 사용이 끝나면 Close() 메서드를 호출하여 닫아 줍니다.
try
{
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0]+" -- "+rdr[1]);
}
rdr.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
만약 이미 DataReader가 하나의 connection에 열려있는데 이 datareader instance나 connection을 다시 사용하려고 하면 아래와 같은 에러가 발생하니 유의하자.
there is already an open datareader associated with this connection which must be closed first
이 에러가 발생하는 원인과 해결방법은 다른 포스팅에서 자세하게 설명을 해 놓았습니다.
- 특정 테이블의 전체 row 개수 구하기. (ExecuteScalar 함수 사용)
MySqlCommand cmd = new MySqlCommand("select count(*) from table_name;", conn);
try
{
index = Convert.ToInt32(cmd.ExecuteScalar()) + 1;
}
catch (Exception ex)
{
// 연결되지 못했거나, 오류가 발생하면 출력한다.
Console.WriteLine("{0} Exception caught.", ex);
}- insert 문 수행 (ExecuteNonQuery 함수 사용)
MySqlCommand cmd_insert = new MySqlCommand(total_line, conn);
try
{
cmd_insert.ExecuteNonQuery();
}
catch (Exception ex)
{
// 연결되지 못했거나, 오류가 발생하면 출력한다.
string line = string.Format("{0},", ex);
MessageBox.Show(line);
}3. connection 닫기
// 데이터베이스를 close 한다.
conn.Close();
Console.WriteLine(string.Format("connection is '{0}'", conn.State));참고: http://www.csharpstudy.com/Practical/Prac-mysql.aspx
https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-sql-command.html
https://blogs.msdn.microsoft.com/spike/2009/08/20/there-is-already-an-open-datareader-associated-with-this-command-which-must-be-closed-first-explained/
http://www.csharpstudy.com/Data/SQL-command.aspx
728x90반응형'프로그래밍 > DB' 카테고리의 다른 글
mysql 테이블 구조 및 내용 복사하기 (insert into select 구문) (0) 2017.01.13 mysql query 실행 결과를 파일로 저장하기 (1) 2017.01.05 mysql 실행중인 job list 확인 및 강제 종료 (0) 2016.04.03 mysql 재시작 오류 - datadir 변경 (0) 2015.07.15 DB connectin error - Authentication with old password no longer supported, use 4.1 style passwords (0) 2015.05.05