본문 바로가기

c#

C# 데이터베이스 연결 하는 법 SqlDataReader SqlDataAdapter 차이점

1.Connection

연결은 SqlConnection 객체를 생성해서 ConnectionString에 서버의 정보를 입력 하면됩니다.

 

이때 MSSQLSERVER는 정해진 형식대로 입력 하면 됩니다.

DataSource:서버 아이피 (또는 서버명)

Initial Catalog :database이름 

UserID 계정 명 

Password 비밀번호

예시)DataSource =111.111.1.10,1223;Initial Catalog =dbname;User ID= 홍길동; Password = 1324;

2.open 

데이터 베이스를 .open()하여  접속

3.SqlCommand 를 통한 명령어 전송

4.SqlDataReader 를 통한 객체 반환

여기서 SqlDataReader를 통한 객체 반환 방식은 db와 연결된 상태에서 하나의 레코드씩 가져오는 방식 입니다.

5.반환된 객체를 .Read함수를 통해 첫번째 row부터 읽어 줍니다.

6.SqlDataReader를 사용하면 DataReader는 하나의 Connection에 하나만 Open되어 있어야 하므로  Close()해줍니다.

           //데이터 베이스 조회하는 방법(연결 지향 방법)

            //1. Connection
            SqlConnection 연결 = new SqlConnection();
            연결.ConnectionString = "서버 정보 입력;";
            //2. Open
            연결.Open();

            //3. Query 작성(Select * From Doctor)
            string query = $"Select * From Doctor";

            //4. Command
            SqlCommand 명령어 = new SqlCommand(query, 연결);

            //5. 실행한 후에 DataReader로 자료를 받기
            SqlDataReader 결과값 = 명령어.ExecuteReader();

            while ( 결과값.Read())
            {
                string title = $"{결과값["ID"]} {결과값["Name"]} {결과값["LicenseNo"]}";
                listBox1.Items.Add(title);
            }

            //6. Close
            연결.Close();

 

아래는 SqlDataAdapter를 사용해 connection하는 방식입니다.

위의 SqlDataReaDer 방식과의 차이점은

SqlDataAdapter를 사용해 connection 하게되면 DataAdapter.Fill()을 통하여 Dataset형식으로 반환된다는 점이고

또한 SqlDataAdapter는 데이터베이스 connection이후 알아서 연결을 끊습니다.

 

         //데이터 베이스 조회하는 방법(비연결 지향 방법)

            //1. Connection
            SqlConnection 연결 = new SqlConnection();
            연결.ConnectionString = "db정보";

            //2. Query 작성(Select * From Test)
            string query = $"Select * From Test";

            //4. DataAdapter
            SqlDataAdapter 어댑터 = new SqlDataAdapter();

            //데이터어댑터는 4가지 command (Select, Update, Delete, Insert)
            어댑터.SelectCommand = new SqlCommand(query, 연결);

            //5. DataSet 
            DataSet 데이터집합 = new DataSet();

            //6. DataAdapter -> DataSet 결과값을 저장
            어댑터.Fill(데이터집합);

            DataTable 테이블 = 데이터집합.Tables[0];

            DataRowCollection 결과값 = 테이블.Rows;
            //7. 화면에 표시
            foreach (DataRow item in 결과값)
            {
                string title = $"{item["ID"]} {item["Name"]} {item["LicenseNo"]}";
                listBox2.Items.Add(title);
            }