프로그래밍 기술/SQL과 ADO.NET

[ADO.NET] SqlCommand 클래스의 ExecuteNonQuery , ExecuteReader 메서드

언제나휴일 2016. 4. 22. 12:41
반응형

 SqlCommand 개체는 명령을 실행할 때 사용하는 개체입니다. SqlCommand 클래스는 다양한 형태로 실행할 수 있게 다양한 Execute메서드를 제공하고 있습니다.

 

ExecuteNonQuery 메서드

 

 ExecuteNonQuery 메서드는 명령을 수행하고 영향을 받은 행의 수를 반환하는 메서드입니다. 행 추가나 변경, 삭제 등의 명령을 수행할 때는 명령으로 영향받은 행의 수만 알면 되기 때문에 ExecuteNonQuery 메서드를 사용합니다.

 

 다음처럼 Books 테이블이 있을 때 SqlCommand 개체의 ExecuteNonQueury 메서드를 이용하여 도서를 추가하는 부분을 작성해 봅시다.

 

Books 테이블 다이어그램

[그림] Books 테이블 다이어그램

 

 먼저 연결에 필요한 문자열이 필요합니다. 접근할 서버 이름과 DB 이름, 접근할 계정 ID와 비밀번호로 구성한 연결 문자열을 설정합니다.

string constr = @"Data Source=[서버 이름];Initial Catalog=[DB ]; User ID=[ID];Password=[PW]";

 

 명령에 필요한 SQL 문을 작성합니다. 여기에서는 하드 코딩하기로 할게요.

string comtext = "insert into Books values ('ADO.NET', 12000, '홍길동', '2984756325')";

 

 SqlConnection 개체를 생성하고 SqlCommand 개체를 생성합니다.

SqlConnection scon = new SqlConnection(constr);

SqlCommand command = new SqlCommand(comtext, scon);

 

 이제 연결을 열고 명령을 수행하면 됩니다. 물론 명령 작업이 끝났으면 연결을 닫아주세요. 결과를 알고자 한다면 ExecuteNonQuery 메서드 호출에서 결과를 반환받아 처리하면 됩니다.

 

scon.Open();

command.ExecuteNonQuery();

scon.Close();


Program.cs


static void Main(string[] args)

{

    string comtext = "insert into Books values ('ADO.NET', 12000, '홍길동', '2984756325')";

    string constr = @"Data Source=[서버 이름];Initial Catalog=[DB ]; User ID=[ID];Password=[PW]";

    SqlConnection scon = new SqlConnection(constr);

    SqlCommand command = new SqlCommand(comtext, scon);

    scon.Open();

    if (command.ExecuteNonQuery() == 1)

    {

        Console.WriteLine("추가 성공");

    }

    else

    {

        Console.WriteLine("추가 실패");

    }

    scon.Close(); 

}

[소스] ExecuteNonQuery 메서드를 이용한 행 추가

 


ExecuteScalar 메서드

 

 명령을 실행하고 수행한 결과 집합에서 1 1열을 반환하는 ExecuteScalra 메서드를 제공하고 있습니다.

  

 

ExecuteReader 메서드

 

 명령 수행하고 수행한 결과를 확인할 때 사용할 SqlDataReader 개체를 빌드하여 반환하는 ExecuteReader 메서드를 제공합니다.

 

 Select 문처럼 명령 수행 결과가 집합일 때 사용하는 메서드입니다. 메서드를 호출 후에 결과를 확인하기 위해서 SqlDataReader 개체를 사용하며 사용이 끝나면 반드시 SqlReader 개체의 Close 메서드를 호출하여야 다른 명령을 수행할 수 있습니다.

  


Program.cs


using System;

using System.Data.SqlClient;

 

namespace ExecuteReader_메서드

{

    class Program

    {

        static void Main(string[] args)

        {

            string comtext = "Select * From Books";           

            string constr = @"Data Source=516-41\SQLEXPRESS2;Initial Catalog=EHDB;Integrated Security=True;Pooling=False;";

            //516-41\SQLEXPRESS2 대신 실제 DBMS 인스턴스 명으로 변경하세요.

            //Catalog 대신 연결할 데이터 베이스 명으로 변경하세요.

            // 코드는 윈도우 계정으로 연결한 예제입니다.

            SqlConnection scon = new SqlConnection(constr);

            SqlCommand command = new SqlCommand(comtext, scon);

            scon.Open();

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())

            {

                Console.Write("도서제목:{0}", reader["Title"]);

                Console.Write(" ISBN:{0}", reader["ISBN"]);

                Console.Write(" 저자:{0}", reader["Author"]);

                Console.WriteLine(" 가격:{0}", reader["Price"]);

            }

            reader.Close();

            scon.Close();

        }

 

    }

}

[소스] ExecuteReader를 이용한 검색


 

 이 외에도 SqlCommand 개체에는 비동기 명령을 실행하기 위한 메서드와 비동기 명령을 종료하는 메서드들도 제공하고 있습니다.

반응형