C#으로 DB 연결

2021. 7. 29. 12:06
728x90

 [ 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()을 사용하는 방법도 괜찮다.

728x90

'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

BELATED ARTICLES

more