다음을 통해 공유


연습: 데이터 조작(Visual Basic)(LINQ to SQL)

업데이트: November 2007

이 연습에서는 데이터베이스의 데이터를 추가, 수정 및 삭제하기 위한 기본 종단 간 LINQ to SQL 시나리오를 제공합니다. Northwind 샘플 데이터베이스의 복사본을 사용하여 고객을 추가하고, 고객의 이름을 변경하고, 주문을 삭제합니다.

참고:

다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

이 연습은 Visual Basic 개발 설정을 사용하여 작성했습니다..

사전 요구 사항

이 연습에서는 다음 사항이 필요합니다.

  • 이 연습에서는 전용 폴더("c:\linqtest2")를 사용하여 파일을 저장합니다. 연습을 시작하기 전에 먼저 이 폴더를 만듭니다.

  • Northwind 샘플 데이터베이스

    이 데이터베이스가 개발 컴퓨터에 없는 경우 Microsoft 다운로드 사이트에서 다운로드할 수 있습니다. 자세한 내용은 샘플 데이터베이스 다운로드(LINQ to SQL)를 참조하십시오. 이 데이터베이스를 다운로드한 후 northwnd.mdf 파일을 c:\linqtest2 폴더에 복사합니다.

  • Northwind 데이터베이스에서 생성된 Visual Basic 코드 파일

    개체 관계형 디자이너 또는 SQLMetal을 사용하여 이 파일을 생성할 수 있습니다. 이 연습은 다음 명령줄을 사용하여 SQLMetal 도구를 통해 작성했습니다.

    sqlmetal /code:"c:\linqtest2\northwind.vb" /language:vb "C:\linqtest2\northwnd.mdf" /pluralize

    자세한 내용은 코드 생성 도구(SqlMetal.exe)를 참조하십시오.

개요

이 연습은 다음과 같은 여섯 가지 주요 작업으로 구성됩니다.

  • Visual Studio에 LINQ to SQL 솔루션 만들기

  • 데이터베이스 코드 파일을 프로젝트에 추가

  • 새 Customer 개체 만들기

  • 고객의 연락처 이름 수정

  • 주문 삭제

  • 이러한 변경 내용을 Northwind 데이터베이스로 전송

LINQ to SQL 솔루션 만들기

이 첫 번째 작업에서는 LINQ to SQL 프로젝트를 빌드하고 실행하는 데 필요한 참조가 들어 있는 Visual Studio 솔루션을 만듭니다.

LINQ to SQL 솔루션을 만들려면

  1. Visual Studio 파일 메뉴에서 새 프로젝트를 클릭합니다.

  2. 새 프로젝트 대화 상자의 프로젝트 형식 창에서 Visual Basic을 클릭합니다.

  3. 템플릿 창에서 콘솔 응용 프로그램을 클릭합니다.

  4. 이름 상자에 LinqDataManipulationApp를 입력합니다.

  5. 확인을 클릭합니다.

LINQ 참조 및 지시문 추가

이 연습에서는 프로젝트에 기본적으로 설치되어 있지 않을 수 있는 어셈블리를 사용합니다. System.Data.Linq가 프로젝트에 참조로 나열되지 않은 경우 솔루션 탐색기의 모든 파일 표시를 클릭하여 참조 노드를 확장하고 다음 단계에 설명된 대로 추가합니다.

System.Data.Linq를 추가하려면

  1. 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭한 다음 참조 추가를 클릭합니다.

  2. 참조 추가 대화 상자에서 .NET을 클릭하고 System.Data.Linq 어셈블리를 클릭한 다음 확인을 클릭합니다.

    어셈블리가 프로젝트에 추가됩니다.

  3. 코드 편집기에서 다음 지시문을 Module1 위에 추가합니다.

    Imports System.Data.Linq
    Imports System.Data.Linq.Mapping
    

Northwind 코드 파일을 프로젝트에 추가

이 단계에서는 SQLMetal 도구를 사용하여 Northwind 샘플 데이터베이스에서 코드 파일을 생성했다고 가정합니다. 자세한 내용은 이 연습 앞부분의 사전 요구 사항 단원을 참조하십시오.

northwind 코드 파일을 프로젝트에 추가하려면

  1. 프로젝트 메뉴에서 기존 항목 추가를 클릭합니다.

  2. 기존 항목 추가 대화 상자에서 c:\linqtest2\northwind.vb로 이동한 다음 추가를 클릭합니다.

    northwind.vb 파일이 프로젝트에 추가됩니다.

데이터베이스 연결 설정

먼저 데이터베이스에 대한 연결을 테스트합니다. 특히 데이터베이스 이름 Northwnd에 i 문자가 없는 것을 확인합니다. 다음 단계에서 오류를 생성하는 경우 northwind.vb 파일을 검토하여 Northwind partial 클래스의 맞춤법을 확인합니다.

데이터베이스 연결을 설정하고 테스트하려면

  1. Sub Main에 다음 코드를 입력하거나 붙여넣습니다.

    ' Use a connection string, but connect to
    '     the temporary copy of the database.
    Dim db As New Northwnd _
        ("C:\linqtest2\northwnd.mdf")
    
    ' Keep the console window open after activity stops.
    Console.ReadLine()
    
  2. 이때 F5 키를 눌러 응용 프로그램을 테스트합니다.

    콘솔 창이 열립니다.

    콘솔 창에서 Enter 키를 누르거나 Visual Studio 디버그 메뉴에서 디버깅 중지를 클릭하여 응용 프로그램을 닫습니다.

새 엔터티 만들기

새 엔터티를 만드는 과정은 단순합니다. New 키워드를 사용하여 개체(예: Customer)를 만들 수 있습니다.

이 단원과 다음 단원에서는 로컬 캐시만 변경합니다. 이 연습의 끝에서 SubmitChanges를 호출할 때까지 변경 내용이 데이터베이스로 전송되지 않습니다.

새 Customer 엔터티 개체를 추가하려면

  1. Sub Main의 Console.ReadLine 앞에 다음 코드를 추가하여 새 Customer를 만듭니다.

    ' Create the new Customer object.
    Dim newCust As New Customer()
    newCust.CompanyName = "AdventureWorks Cafe"
    newCust.CustomerID = "A3VCA"
    
    ' Add the customer to the Customers table.
    db.Customers.InsertOnSubmit(newCust)
    
    Console.WriteLine("Customers matching CA before insert:")
    
    Dim custQuery = _
        From cust In db.Customers _
        Where cust.CustomerID.Contains("CA") _
        Select cust
    
    For Each cust In custQuery
        Console.WriteLine("Customer ID: " & cust.CustomerID)
    Next
    
  2. F5 키를 눌러 솔루션을 디버깅합니다.

    콘솔 창에 표시되는 결과는 다음과 같습니다.

    Customers matching CA before insert:

    Customer ID: CACTU

    Customer ID: RICAR

    새 행이 결과에 나타나지 않습니다. 새 데이터가 아직 데이터베이스로 전송되지 않았습니다.

  3. 콘솔 창에서 Enter 키를 눌러 디버깅을 중지합니다.

엔터티 업데이트

다음 단계에서는 Customer 개체를 검색하고 해당 속성 중 하나를 수정합니다.

Customer 이름을 변경하려면

  • Console.ReadLine() 위에 다음 코드를 추가합니다.

    Dim existingCust = _
        (From cust In db.Customers _
        Where cust.CustomerID = "ALFKI" _
        Select cust).First()
    
    ' Change the contact name of the customer.
    existingCust.ContactName = "New Contact"
    

엔터티 삭제

동일한 Customer 개체를 사용하여 첫 번째 주문을 삭제할 수 있습니다.

다음 코드에서는 행 간의 관계를 끊는 방법과 데이터베이스에서 행을 삭제하는 방법을 보여 줍니다.

행을 삭제하려면

  • Console.ReadLine() 바로 위에 다음 코드를 추가합니다.

    ' Access the first element in the Orders collection.
    Dim ord0 As Order = existingCust.Orders(0)
    
    ' Access the first element in the OrderDetails collection.
    Dim detail0 As OrderDetail = ord0.OrderDetails(0)
    
    ' Display the order to be deleted.
    Console.WriteLine _
        (vbCrLf & "The Order Detail to be deleted is: OrderID = " _
        & detail0.OrderID)
    
    ' Mark the Order Detail row for deletion from the database.
    db.OrderDetails.DeleteOnSubmit(detail0)
    

변경 내용을 데이터베이스로 전송

개체를 만들고 업데이트 및 삭제하는 데 필요한 첫 번째 단계는 실제로 변경 내용을 데이터베이스로 전송하는 것입니다. 이 단계를 수행하지 않으면 변경 내용은 로컬에만 적용되고 쿼리 결과에 나타나지 않습니다.

변경 내용을 데이터베이스로 전송하려면

  1. Console.ReadLine 바로 위에 다음 코드를 삽입합니다.

    db.SubmitChanges()
    
  2. SubmitChanges 뒤에 다음 코드를 삽입하여 변경 내용 전송 전후의 결과를 보여 줍니다.

    Console.WriteLine(vbCrLf & "Customers matching CA after update:")
    Dim finalQuery = _
        From cust In db.Customers _
        Where cust.CustomerID.Contains("CA") _
        Select cust
    
    For Each cust In finalQuery
        Console.WriteLine("Customer ID: " & cust.CustomerID)
    Next
    
  3. F5 키를 눌러 솔루션을 디버깅합니다.

    콘솔 창이 다음과 같이 나타납니다.

    Customers matching CA before update:
    Customer ID: CACTU
    Customer ID: RICAR
    
    The Order Detail to be deleted is: OrderID = 10643
    
    Customers matching CA after update:
    Customer ID: A3VCA
    Customer ID: CACTU
    Customer ID: RICAR
    
  4. 콘솔 창에서 Enter 키를 눌러 디버깅을 중지합니다.

참고:

변경 내용을 전송하여 새 고객을 추가한 후에는 동일한 고객을 있는 그대로 다시 추가할 수 없으므로 이 솔루션을 있는 그대로 다시 실행할 수 없습니다. 솔루션을 다시 실행하려면 추가할 고객 ID의 값을 변경합니다.

참고 항목

개념

연습을 통한 학습(LINQ to SQL)