SqlCommand 소개
SqlCommand는 실행할 SQL 구문을 캡슐화합니다. 이미 설정된 데이터베이스 연결을 통해 데이터베이스에 명령을 보내고 실행 결과를 가져옵니다.
생성자는 두 매개변수를 받습니다: SQL 텍스트(cmdText) 와 데이터베이스 연결 객체(SqlConnection).
간단한 예제
SQL Server를 미리 설치하고 Article 테이블을 생성한 뒤 테스트 레코드 한 건을 삽입해 주세요.
private void button1_Click(object sender, EventArgs e)
{
// 1. 연결 문자열 정의
string connectionString = "User ID=sa;pwd=qweqwe;initial catalog=DB;Data Source=.;";
// 2. 연결 객체 생성
SqlConnection conn = new SqlConnection(connectionString);
// 3. 실행할 SQL 구문 정의
string cmdText = "SELECT GETDATE(),count(1) FROM [DB].[dbo].[Article]";
// 4. 명령 객체를 만들고 SQL과 DB 연결을 바인딩
SqlCommand command = new SqlCommand(cmdText, conn);
conn.Open(); // 데이터베이스 연결 열기
// ExecuteScalar():SQL 실행 후 결과 집합【첫 번째 행, 첫 번째 열】의 데이터를 object 타입으로 반환
object res = command.ExecuteScalar();
MessageBox.Show(res.ToString());
conn.Close(); // 연결 닫기
}Code language: C# (cs)
SQL Server 테이블
CREATE TABLE Article(
id INT PRIMARY KEY IDENTITY(1,1),
Title NCHAR(10) NULL,
AddTime NCHAR(10) NULL
);Code language: SQL (Structured Query Language) (sql)
핵심 메서드: ExecuteScalar()
- 집계 쿼리 실행:
COUNT(),MAX(),MIN(),SUM() - 단일 값 조회, 예: 데이터베이스 현재 시간, 자동 증가 기본키 ID
주의사항:
- 반환 타입은
object이므로 직접 형변환을 해야 합니다; - SQL 쿼리 결과가 여러 행, 여러 열일 경우 첫 번째 행 첫 번째 열 데이터만 가져오고 나머지는 무시합니다;
- 메서드 호출 전 반드시
conn.Open()으로 연결을 열어야 합니다.
권장 작성 방식
using 구문을 사용해 연결 리소스를 자동으로 해제하고 연결 닫는 것을 잊어 발생하는 연결 누수를 피하세요:
string connectionString = "User ID=sa;pwd=qweqwe;initial catalog=DB;Data Source=.;";
string cmdText = "SELECT GETDATE(),count(1) FROM [DB].[dbo].[Article]";
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(cmdText, conn);
conn.Open();
object res = command.ExecuteScalar();
MessageBox.Show(res.ToString());
}
// using 블록을 벗어나면 연결이 자동 해제되므로 conn.Close()를 수동으로 호출할 필요 없음Code language: JavaScript (javascript)
추가 설명
SqlCommand에는 자주 쓰이는 실행 메서드가 3가지 더 있습니다:
ExecuteNonQuery(): INSERT/UPDATE/DELETE 실행, 영향받은 행 수 반환ExecuteReader(): DataReader 스트림을 반환하며 여러 조회 결과를 행 단위로 읽음ExecuteXmlReader(): XML 형식 데이터 읽기 (실무에서 자주 쓰이지 않음)
이 메서드들의 사용법은 이후 강의에서 다룹니다.
SqlCommand
Previous: 소개 및 연결
Next: CommandTimeout