'update'에 해당되는 글 2건

Programming/.NET
ADO.NET 은 .NET Framework 1.0 부터 포함된 핵심 컴포넌트에 해당하며 오늘날 데이터에 접근할 수 있는 다양한 방법을 제시함으로써 근본적으로 데이터를 다루기 위한 여러 기능을 제공하고 있습니다.

ADO.NET 이전의 ADO 는 데이터베이스로부터 지속적으로 데이터 연결을 유지한 상태에서 필요한 데이터를 다루어야 했는데 연결상태가 계속해서 유지되어야 한다는 면은 비효휼적인 면을 드러냈고 곧 비연결상태에서도 데이터를 다룰 수 있어야 한다는 요구가 제시되었습니다.

비연결의 근본적인 동작방식은 데이터를 특정 컬렉션에 채워넣고 DB와의 연결을 끊은상태에서 컬렉션에 채워진 데이터를 다루는 것입니다. ADO.NET 의 DataSet 이 바로 그러한 역활을 수행하는데 컬렉션에 채워진 데이터는 데이터베이스와는 분리된 상태이지만 데이터내용은 물론 모든 테이블정보(열, 행, 릴레이션관한 것등)를 완벽히 유지하면서 데이터를 다룰 수 있습니다.

사실 이게 중요한데 이전 ADO 에서는 데이터를 담아두기 위한 단독적인 테이블이 필요했으며 이것은 데이터베이스의 테이블정보를 전혀 반영하지 않은 것이었습니다.

또한 ADO.NET 은 통합된 프로그래밍 모델로서 서버나 클라이언트 모두 같은 방법으로 데이터를 다룰 수 있어서 기존 ADO 보다는 좀더 나은 생산성을 기대할 수 있습니다.

 Select

데이터 소스를 연결하고 나서 단순히 데이터를 읽어오기만 하는 경우라면 간단히 DataReader 클래스를 사용할 수 있습니다.
public List<string> GetPersonPhone()
{
    string strCmd = "Select * From [Person].[PersonPhone];";
 
    SqlConnection conn = new SqlConnection(@"Data Source=localhost;Initial Catalog=AdventureWorks2012;User ID=sa;Password=123");
    SqlCommand cmd = new SqlCommand(strCmd, conn);
    conn.Open();
 
    List<string> rtn = new List<string>();                
            
    SqlDataReader SqlReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);                
 
    while (SqlReader.Read())
        rtn.Add(SqlReader["PhoneNumber"].ToString());
 
    return rtn;
}
▶<코드 1-1>

<코드 1-1>은 AdventureWorks2012 DB의 Person.PersonPhone 테이블의 내용을 가져와 그 중 PhoneNumbe
r 컬럼의 데이터를 List 에 담고 반환하는 예제입니다.

DB 서버의 연결을 위해 SqlConnection 클래스의 인스턴스를 생성해 연결문자열을 지정하고 뒤이어 SqlCom
mand 객체를 생성하면서 데이터를 가져오기 위한 쿼리문과 SqlConnection 객체를 전달합니다. 여기까지 하고 나면 DB연결준비는 끝난것으로 SqlConnection 객체의 Open 함수를 호출하여 지정한 DB를 열도록 합니다.

SqlCommand 클래스가 쿼리문을 실행하는 클래스로서 ExecuteReader 메소드를 호출해 쿼리를 전달하고 반환된 SqlDataReader 객체의 Read() 메소드를 순환호출함으로서 실제 내용을 읽어오도록 합니다. 그리고 모든 데이터를 배열이나 리스트등에 담게 되면 DB와의 연결은 자동으로 닫히게 됩니다.

 Insert

Insert 는 Select 처리가 별반 다르지 않습니다. 쿼리문을 Insert 에 맞게 수정하고 Select 때의 ExecuteReader 메소드 대신에 ExecuteNonQuery 메소드를 호출하는 것이 전부입니다.
public void AddPersonPhone()
{
    string strCmd = "Insert Into [Person].[PersonPhone] Values (20777, '1 (11) 500 555-1212', 1, GETDATE());";
 
    SqlConnection conn = new SqlConnection(@"Data Source=localhost;Initial Catalog=AdventureWorks2012;User ID=sa;Password=123");
    SqlCommand cmd = new SqlCommand(strCmd, conn);
    conn.Open();
 
    cmd.ExecuteNonQuery();
    conn.Close();
}
▶<코드 2-1>

<코드 2-1> 에서는 Select 때와는 달리 데이터를 담을 수 있는 배열등이 필요없으며 단지 DB 를 Open 한 이후 쿼리를 실행하는 ExecuteNonQuery 메소드를 바로 호출합니다. 다만 필요한 작업을 수행한 이 후 Close 메소드를 호출하여 DB 연결을 닫아주도록 합니다.

 Update

Table 의 Update 는 <코드 2-1> Insert 작업에서 쿼리만 Update 구문으로 바꿔주면 됩니다. 쉽죠?
public void ModifyPersonPhone()
{
    string strCmd = "Update [Person].[PersonPhone] Set PhoneNumber = '000-000-0000' Where BusinessEntityID = 20777;";
 
    SqlConnection conn = new SqlConnection(@"Data Source=localhost;Initial Catalog=AdventureWorks2012;User ID=sa;Password=123");
    SqlCommand cmd = new SqlCommand(strCmd, conn);
    conn.Open();
 
    cmd.ExecuteNonQuery();
    conn.Close();
}
▶<코드 3-1>

참고로 ExecuteNonQuery 함수는 쿼리 실행에 적용된 Table 의 Row 수를 반환합니다. 따라서 만일 Update 로 인해 변경된 Row 수를 알아야 한다면 ExecuteNonQuery 함수호출시 다음과 같은 방법으로 결과값을 가져오면 됩니다.
int updateRow = cmd.ExecuteNonQuery();
이러한 처리 방법은 Insert 나 Delete 등에도 똑같이 적용될 수 있습니다.

 Delete

Delete 는 Insert 나 Update 와 비교해 쿼리문만 다를 뿐 모든처리과정이 같습니다.

public void delPersonPhone()
{
    string strCmd = "Delete From Person.PersonPhone Where BusinessEntityID = 20777;";
 
    SqlConnection conn = new SqlConnection(@"Data Source=localhost;Initial Catalog=AdventureWorks2012;User ID=sa;Password=123");
    SqlCommand cmd = new SqlCommand(strCmd, conn);
    conn.Open();
 
    int updateRow = cmd.ExecuteNonQuery();
    conn.Close();
}
3 0
Programming/Microsoft SQL Server
Table의 Data를 변경하기 위한 구문으로는 Update가 사용됩니다. Update문을 다루는 것에는 큰 어려움없이 무난하게 접근하실 수 있으나 Data를 변경하는 것이므로 사용시에 주의를 기울이시는게 좋습니다.

1. 모든열 수정

Update HumanResources.Department
Set GroupName = GroupName + ' Part'

HumanResources.Department Table의 GroupName 열뒤에 'Part' 문자열을 추가합니다.


2. 선택적 열 수정

Update문도 Where절을 통해 특정 조건을 지정하여 원하는 행만 수정되도록 할 수 있습니다.

Update HumanResources.Department
Set GroupName = 'an executive department'
Where Name = 'Executive'

HumanResources.Department Table에서 Name이 'Executive'인것만 GroupName을 'an executive department'로 변경합니다.


Update 조건은 Where문을 이용한 단순한 비교식 이외에도 In이나 Like및 다른 Table과의 조인, 하위Query등 Select문에서 다루었던 거의 모든 조건을 Update문에서도 동일하게 적용할 수 있습니다.

3. 두건이상의 열변경

Update HumanResources.Department
Set Name = 'Admin', GroupName = 'Administrator Group'
Where DepartmentID = 16

HumanResources.Department 에서 DepartmentID가 16인 행의 Name열과 GroupName열 Data를 변경합니다.


4. 변경대상을 조건으로 하기

필요하다면 변경하고자 하는 열 자체를 다음과 같이 조건으로 지정할 수도 있습니다.

Update HumanResources.Department
Set Name = 'Sales Group'
Where Name = 'Sales'

HumanResources.Department Table의 Name열이 'Sales'인것을 'Sales Group'으로 변경합니다.

'Programming > Microsoft SQL Server' 카테고리의 다른 글

[SQL] 예외처리(try ~ catch)  (0) 2010.09.06
[SQL] Batch처리(일괄처리)의 개념  (0) 2010.09.03
[SQL] Update  (0) 2010.09.01
[SQL] Replicate로 문자열 채워넣기  (0) 2010.08.26
[SQL] Delete  (0) 2010.08.25
[SQL] 임시 Table과 변수 Table  (2) 2010.08.24
0 0
1
블로그 이미지

클리엘