SqlCommand 개체는 명령을 실행할 때 사용하는 개체입니다. SqlCommand 클래스는 다양한 형태로 실행할 수 있게 다양한 Execute메서드를 제공하고 있습니다.
ExecuteNonQuery 메서드
ExecuteNonQuery 메서드는 명령을 수행하고 영향을 받은 행의 수를 반환하는 메서드입니다. 행 추가나 변경, 삭제 등의 명령을 수행할 때는 명령으로 영향받은 행의 수만 알면 되기 때문에 ExecuteNonQuery 메서드를 사용합니다.
다음처럼 Books 테이블이 있을 때 SqlCommand 개체의 ExecuteNonQueury 메서드를 이용하여 도서를 추가하는 부분을 작성해 봅시다.
먼저 연결에 필요한 문자열이 필요합니다. 접근할 서버 이름과 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 개체에는 비동기 명령을 실행하기 위한 메서드와 비동기 명령을 종료하는 메서드들도 제공하고 있습니다.