34. [ADO.NET] SqlCommand의 Execute 메서드

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

ExecuteNonQuery 메서드

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

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

Book 테이블 다이어그램
Book 테이블 다이어그램

먼저 연결에 필요한 문자열이 필요합니다. 접근할 서버 이름과 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();

다음은 설명한 코드입니다.

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(); 
}

ExecuteScalar 메서드

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

ExecuteReader 메서드

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

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

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();
        }
 
    }
}

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