C# ADO.NET을 이용한 SQL Server 데이터 생성, 수정 및 삭제 구현

1. 데이터 추가 (INSERT)

ADO.NET의 SqlCommand 객체를 사용하여 데이터베이스에 새로운 레코드를 삽입할 수 있습니다. ExecuteNonQuery() 메서드는 SQL 문을 실행한 후 영향받은 행(row)의 수를 반환하므로, 이를 통해 작업 성공 여부를 판단할 수 있습니다.


// 1. 연결 문자열 설정
string connectionString = "Server=.;DataBase=AcademyDB;Uid=sa;Pwd=password123";

// 2. SQL 연결 및 명령어 객체 생성
using (SqlConnection dbConn = new SqlConnection(connectionString))
{
    // 실행할 SQL 쿼리 작성
    string insertQuery = "INSERT INTO Members (MemberName, Gender, BirthDate, IdentityCard, Age, Mobile, Address, ClassId) ";
    insertQuery += "VALUES ('{0}', '{1}', '{2}', '{3}', {4}, '{5}', '{6}', {7})";
    
    string formattedSql = string.Format(insertQuery, "김철수", "남성", "1995-05-10", "9505101234567", 28, "010-1234-5678", "서울시 강남구", 1);

    SqlCommand dbCmd = new SqlCommand(formattedSql, dbConn);

    // 3. 데이터베이스 연결 및 쿼리 실행
    dbConn.Open();
    int rowsAffected = dbCmd.ExecuteNonQuery();
    dbConn.Close();

    // 결과 확인
    if (rowsAffected > 0)
    {
        Console.WriteLine("데이터가 성공적으로 추가되었습니다.");
    }
    else
    {
        Console.WriteLine("데이터 삽입에 실패하였습니다.");
    }
}

2. 데이터 수정 및 삭제 (UPDATE & DELETE)

수정과 삭제 역시 ExecuteNonQuery() 메서드를 사용합니다. 조건절(WHERE)을 정확히 지정하여 의도하지 않은 데이터가 변경되지 않도록 주의해야 합니다.

데이터 수정 예시


string connectionString = "Server=.;DataBase=AcademyDB;Uid=sa;Pwd=password123";
SqlConnection dbConn = new SqlConnection(connectionString);

// 특정 ID를 가진 회원의 이름을 변경하는 쿼리
string updateSql = string.Format("UPDATE Members SET MemberName='{0}' WHERE MemberId={1}", "이영희", 1005);

SqlCommand updateCmd = new SqlCommand(updateSql, dbConn);

dbConn.Open();
int updateResult = updateCmd.ExecuteNonQuery();
dbConn.Close();

if (updateResult == 1) Console.WriteLine("수정 완료");

데이터 삭제 예시


string connectionString = "Server=.;DataBase=AcademyDB;Uid=sa;Pwd=password123";
SqlConnection dbConn = new SqlConnection(connectionString);

// 특정 ID를 가진 레코드 삭제
int targetId = 1020;
string deleteSql = "DELETE FROM Members WHERE MemberId = " + targetId;

SqlCommand deleteCmd = new SqlCommand(deleteSql, dbConn);

dbConn.Open();
int deleteResult = deleteCmd.ExecuteNonQuery();
dbConn.Close();

if (deleteResult == 1) Console.WriteLine("삭제 성공");

3. 다중 SQL 문 일괄 실행

여러 개의 SQL 명령을 세미콜론(;)으로 구분하여 하나의 문자열로 결합한 뒤 한 번에 실행할 수 있습니다. 이는 네트워크 왕복 횟수를 줄여 성능을 최적화하는 데 도움이 됩니다.


static void ExecuteMultipleCommands()
{
    string connStr = "Server=.;DataBase=AcademyDB;Uid=sa;Pwd=password123";
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        // 여러 SQL 문을 세미콜론으로 연결
        string sql1 = "INSERT INTO Members (MemberName, ClassId) VALUES ('박지성', 2)";
        string sql2 = "INSERT INTO Members (MemberName, ClassId) VALUES ('손흥민', 1)";
        string sql3 = "UPDATE Members SET MemberName = '황희찬' WHERE MemberId = 1005";

        string combinedSql = $"{sql1};{sql2};{sql3}";

        SqlCommand cmd = new SqlCommand(combinedSql, conn);
        conn.Open();
        
        // 실행된 모든 명령의 영향받은 행의 총합이 반환됨
        int totalRows = cmd.ExecuteNonQuery();
        conn.Close();

        Console.WriteLine($"총 {totalRows}개의 행이 처리되었습니다.");
    }
}

4. INSERT 실행 후 자동 증가(Identity) 값 가져오기

데이터를 삽입한 직후 데이터베이스에서 생성된 자동 증가 PK(ID) 값을 가져와야 할 경우가 있습니다. 이때는 SELECT @@IDENTITY 또는 SELECT SCOPE_IDENTITY()를 사용하며, 단일 값을 반환하는 ExecuteScalar() 메서드를 활용합니다.


string connStr = "Server=.;DataBase=AcademyDB;Uid=sa;Pwd=password123";
using (SqlConnection conn = new SqlConnection(connStr))
{
    // 삽입과 동시에 ID 조회를 수행하는 쿼리
    string sql = "INSERT INTO Members (MemberName, ClassId) VALUES ('기성용', 3); SELECT SCOPE_IDENTITY();";
    
    SqlCommand cmd = new SqlCommand(sql, conn);
    conn.Open();

    // ExecuteScalar는 결과 집합의 첫 번째 행, 첫 번째 열의 값을 반환함
    object newId = cmd.ExecuteScalar();
    conn.Close();

    Console.WriteLine($"신규 등록된 회원의 번호: {newId}");
}

태그: C# SQL Server ADO.NET SqlCommand ExecuteNonQuery

8월 29일 07:48에 게시됨