C#으로 DB 연결
[ DB에 연결하는 문자열 ]
string connString = @"DataSource = "+ p_strIP +"; Initial Catalog = " + p_strCatalog + "; UserID = 아이디; Password = 비번";
1. DataSource = <연결할 서버의 주소>;
2. Initial Catalog = <연결할 DB 이름>;
3. UserID = <서버 계정이름>;
4. Password = <서버 비밀번호>;
데이터베이스 연결하는 방법은 다양하고, 나는 아래 중 첫 번째 방법(모듈화)을 주로 사용한다.
[ DB 1개 연결하는 경우 ]
1. 모듈화
/* Module */
class Con_Database
{
string connString = @"Data Source = IP주소;Initial Catalog=northwind;User ID=sa;Password=비밀번호";
public SqlConnection conn;
public void Open()
{
try
{
if (conn == null)
{
conn = new SqlConnection(connString);
conn.Open();
}
}
catch (Exception ex)
{
throw ex;
}
}
public void Close()
{
try
{
if (conn != null)
{
conn.Close();
}
}
catch (Exception ex)
{
throw ex;
}
}
//DataSet 객체 리턴
public DataSet GetDataSet(string sql)
{
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
/* Form 1 */
// DB 연결
Con_Database db = new Con_Database();
db.Open();
string sql = "";
...
DataSet ds = db.GetDataSet(sql);
gridcontrol.DataSource = ds.Tables[0];
db.Close();
*꿀팁 :
만약에 data table의 정보를 xml schema 파일에 담아서 저장하고싶다면 Con_Database 모듈 안에 WriteXmlSchema() 를 추가해주면 된다.
//DataSet 객체 리턴
public DataSet GetDataSet(string sql)
{
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds);
ds.Tables[0].WriteXmlSchema(@"C:\practice\Demo\DemoApplication08\fmMain(1).xsd");
return ds;
}
// WriteXmlSchema() 함수는 스키마 파일 생성 시에만 사용하고 다시 주석처리해야함
2. using() 사용
//using() 사용 시 conection을 자동으로 close() 해주므로 편리하다. 즉, db.Close()를 사용할 필요가 없다.
DataSet ds = new DataSet();
DataTable dt = ds.Tables["member"];
string connetionString = @"Data Source=.;Initial Catalog=Test01;User ID=sa;Password=비번";
using (SqlConnection cnn = new SqlConnection(connetionString))
{
DataSet ds = new DataSet();
conn.Open();
string sql = "Select id, name, email from member";
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = new SqlCommand(sql, conn);
sda.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
if (conn != null)
conn.Close();
conn.Close();
}
3. 아래의 방법
string connetionString;
SqlConnection cnn;
connetionString = @"Data Source=.;Initial Catalog=Test01;User ID=sa;Password=비번";
cnn = new SqlConnection(connetionString);
cnn.Open();
SqlCommand command; // perform sql operations against DB
SqlDataAdapter adapter = new SqlDataAdapter(); // perform insert,delete,update
String sql = "";
sql = "Delete member where id=''"; // Define sql statement
command = new SqlCommand(sql, cnn); // define sqlcommand statement(object)
adapter.DeleteCommand = new SqlCommand(sql, cnn);
adapter.DeleteCommand.ExecuteNonQuery();
// 상황에 따라 DeleteCommand를 InsertCommand, UpdateCommand로 교체 가능
// close all objects
command.Dispose();
cnn.Close();
[ DB 2개 이상 연결하는 경우 ]
1번 방법 (모듈화)을 사용하여 DB를 2개 이상 연결하는 경우를 살펴보자.
/*Con_Database 모듈 안에 작성*/
public SqlConnection conn;
// 생성자1
public Con_Database()
{
string connString = @"";
}
// 오버로드 된 생성자2
public Con_Database(string p_strIP, string p_strCatalog)
{
string connString = @"DataSource = "+ p_strIP +"; Initial Catalog = " + p_strCatalog + "; UserID = sa; Password = 비번";
}
// ID, PW 까지 받아오는 3번째 생성자를 오버로드해서 만들 수 있음
*주의사항:
DB connection class를 form1 안에 함께 작성할 경우:
(1) form2 등 다른 form에서 DB연결 시도할 때 연결되긴 하지만, form1을 거쳐야하므로 비효율적임
(2) DB connection class를 먼저 작성한 후 form class를 작성하면 디자이너가 사라지는 등 문제가 발생할 수 있으므로 반대 순서로 작성해야함.
따라서, 나는 DB를 모듈화하는 방법을 추천한다. 만약 이 방법이 어렵다면 폼 내부에서 class로 만들지 않고 using()을 사용하는 방법도 괜찮다.
'C# > Visual C# 코드 리뷰' 카테고리의 다른 글
Crystal Reports 연동 (0) | 2021.07.29 |
---|---|
Xtrareport 연동 (0) | 2021.07.29 |
XML Schema 파일 생성 방법 (0) | 2021.07.15 |
System.Environment.NewLine; (0) | 2021.07.15 |
폼 간 데이터 전송 방법 (1) | 2021.06.17 |