다음을 통해 공유


데이터를 데이터 세트에 로드

LINQ to DataSet를 사용하여 쿼리하려면 먼저 DataSet 개체를 채워야 합니다. DataSet은 여러 방법으로 채울 수 있습니다. 예를 들어 LINQ to SQL을 사용하여 데이터베이스를 쿼리하고 결과를 DataSet에 로드할 수 있습니다. 자세한 내용은 LINQ to SQL을 참조하십시오.

DataSet에 데이터를 로드하는 일반적인 방법 중에는 DataAdapter 클래스를 사용하여 데이터베이스에서 데이터를 검색하는 방법도 있습니다. 다음 예에서 확인할 수 있습니다.

예시

이 예제에서는 DataAdapter를 사용하여 AdventureWorks 데이터베이스에서 2002년 판매 정보를 쿼리한 다음 그 결과를 DataSet에 로드합니다. DataSet가 채워지면 LINQ to DataSet를 사용하여 이에 대한 쿼리를 작성할 수 있습니다. 이 예제의 FillDataSet메서드는 LINQ to DataSet 예제에서 예제 쿼리에 사용됩니다. 자세한 내용은 데이터 세트 쿼리를 참조하세요.

Try
    Dim connectionString As String

    connectionString = "..."

    ' Create a new adapter and give it a query to fetch sales order, contact,
    ' address, and product information for sales in the year 2002. Point connection
    ' information to the configuration setting "AdventureWorks".
    Dim da = New SqlDataAdapter( _
    "SELECT SalesOrderID, ContactID, OrderDate, OnlineOrderFlag, " & _
        "TotalDue, SalesOrderNumber, Status, ShipToAddressID, BillToAddressID " & _
        "FROM Sales.SalesOrderHeader " & _
        "WHERE DATEPART(YEAR, OrderDate) = @year; " & _
        "SELECT d.SalesOrderID, d.SalesOrderDetailID, d.OrderQty, " & _
        "d.ProductID, d.UnitPrice " & _
        "FROM Sales.SalesOrderDetail d " & _
        "INNER JOIN Sales.SalesOrderHeader h " & _
        "ON d.SalesOrderID = h.SalesOrderID  " & _
        "WHERE DATEPART(YEAR, OrderDate) = @year; " & _
        "SELECT p.ProductID, p.Name, p.ProductNumber, p.MakeFlag, " & _
        "p.Color, p.ListPrice, p.Size, p.Class, p.Style  " & _
        "FROM Production.Product p; " & _
        "SELECT DISTINCT a.AddressID, a.AddressLine1, a.AddressLine2, " & _
        "a.City, a.StateProvinceID, a.PostalCode " & _
        "FROM Person.Address a " & _
        "INNER JOIN Sales.SalesOrderHeader h " & _
        "ON  a.AddressID = h.ShipToAddressID OR a.AddressID = h.BillToAddressID " & _
        "WHERE DATEPART(YEAR, OrderDate) = @year; " & _
        "SELECT DISTINCT c.ContactID, c.Title, c.FirstName, " & _
        "c.LastName, c.EmailAddress, c.Phone " & _
        "FROM Person.Contact c " & _
        "INNER JOIN Sales.SalesOrderHeader h " & _
        "ON c.ContactID = h.ContactID " & _
        "WHERE DATEPART(YEAR, OrderDate) = @year;", _
    connectionString)

    ' Add table mappings.
    da.SelectCommand.Parameters.AddWithValue("@year", 2002)
    da.TableMappings.Add("Table", "SalesOrderHeader")
    da.TableMappings.Add("Table1", "SalesOrderDetail")
    da.TableMappings.Add("Table2", "Product")
    da.TableMappings.Add("Table3", "Address")
    da.TableMappings.Add("Table4", "Contact")

    da.Fill(ds)

    ' Add data relations.
    Dim orderHeader As DataTable = ds.Tables("SalesOrderHeader")
    Dim orderDetail As DataTable = ds.Tables("SalesOrderDetail")
    Dim co As DataRelation = New DataRelation("SalesOrderHeaderDetail", _
                                    orderHeader.Columns("SalesOrderID"), _
                                    orderDetail.Columns("SalesOrderID"), True)
    ds.Relations.Add(co)

    Dim contact As DataTable = ds.Tables("Contact")
    Dim orderContact As DataRelation = New DataRelation("SalesOrderContact", _
                                    contact.Columns("ContactID"), _
                                    orderHeader.Columns("ContactID"), True)
    ds.Relations.Add(orderContact)
Catch ex As SqlException
    Console.WriteLine("SQL exception occurred: " & ex.Message)
End Try

참고 항목