SqlDataSource 컨트롤을 사용하여 데이터 쿼리(VB)Querying Data with the SqlDataSource Control (VB)

Scott Mitchellby Scott Mitchell

샘플 앱 다운로드 또는 PDF 다운로드Download Sample App or Download PDF

위의 자습서에서는 ObjectDataSource 컨트롤을 사용 하 여 데이터 액세스 계층에서 프레젠테이션 계층을 완전히 분리 했습니다.In the preceding tutorials we used the ObjectDataSource control to fully separate the presentation layer from the Data Access layer. 이 자습서부터 시작 하 여, 프레젠테이션 및 데이터 액세스를 엄격 하 게 분리 하지 않아도 되는 간단한 응용 프로그램에 대해 SqlDataSource 컨트롤을 사용할 수 있는 방법을 알아봅니다.Starting with this tutorial, we learn how the SqlDataSource control can be used for simple applications that do not require such a strict separation of presentation and data access.

소개Introduction

지금까지 검토 한 모든 자습서는 프레젠테이션, 비즈니스 논리 및 데이터 액세스 계층으로 구성 된 계층화 된 아키텍처를 사용 했습니다.All of the tutorials we ve examined so far have used a tiered architecture consisting of presentation, Business Logic, and Data Access layers. DAL (데이터 액세스 계층)은 첫 번째 자습서 (데이터 액세스 계층 생성) 및 비즈니스 논리 계층 (비즈니스 논리 계층 생성)에서 작성 되었습니다.The Data Access Layer (DAL) was crafted in the first tutorial (Creating a Data Access Layer) and the Business Logic Layer in the second (Creating a Business Logic Layer). ObjectDataSource를 사용 하 여 데이터 표시 자습서부터 ASP.NET 2.0 s 새 ObjectDataSource 컨트롤을 사용 하 여 프레젠테이션 계층에서 아키텍처와 선언적으로 인터페이스 하는 방법을 살펴보았습니다.Starting with the Displaying Data With the ObjectDataSource tutorial, we saw how to use ASP.NET 2.0 s new ObjectDataSource control to declaratively interface with the architecture from the presentation layer.

지금 까지의 모든 자습서에서는 아키텍처를 사용 하 여 데이터 작업을 수행 했지만 아키텍처를 우회 하 여 ASP.NET 페이지에서 직접 데이터베이스 데이터를 액세스, 삽입, 업데이트 및 삭제할 수 있습니다.While all of the tutorials so far have used the architecture to work with data, it is also possible to access, insert, update, and delete database data directly from an ASP.NET page, bypassing the architecture. 이렇게 하면 특정 데이터베이스 쿼리와 비즈니스 논리가 웹 페이지에 직접 배치 됩니다.Doing so places the specific database queries and business logic directly in the web page. 응용 프로그램의 성공, 업데이트 및 유지 관리를 위해 계층화 된 아키텍처를 디자인, 구현 및 사용 하는 것은 응용 프로그램의 성공, 업데이트 및 유지 관리에 매우 중요 합니다.For sufficiently large or complex applications, designing, implementing, and using a tiered architecture is vitally important for the success, updatability, and maintainability of the application. 그러나 매우 간단한 일회용 응용 프로그램을 만드는 경우 강력한 아키텍처를 개발 하는 것은 불필요 합니다.Developing a robust architecture, however, may be unnecessary when creating exceedingly simple, one-off applications.

ASP.NET 2.0는 SqlDataSource, AccessDataSource, ObjectDataSource, XmlDataSourceSiteMapDataSource의 5 가지 기본 제공 데이터 소스 컨트롤을 제공 합니다.ASP.NET 2.0 provides five built-in data source controls SqlDataSource, AccessDataSource, ObjectDataSource, XmlDataSource, and SiteMapDataSource. SqlDataSource를 사용 하 여 Microsoft SQL Server, Microsoft Access, Oracle, MySQL 등을 비롯 한 관계형 데이터베이스에서 직접 데이터에 액세스 하 고 수정할 수 있습니다.The SqlDataSource can be used to access and modify data directly from a relational database, including Microsoft SQL Server, Microsoft Access, Oracle, MySQL, and others. 이 자습서 및 다음 세 가지에서는 sqldatasource 컨트롤을 사용 하 여 작업 하는 방법, 데이터베이스 데이터를 쿼리하고 필터링 하는 방법, SqlDataSource를 사용 하 여 데이터를 삽입, 업데이트 및 삭제 하는 방법을 살펴보겠습니다.In this tutorial and the next three, we'll examine how to work with the SqlDataSource control, exploring how to query and filter database data, as well as how to use the SqlDataSource to insert, update, and delete data.

ASP.NET 2.0에는 5 가지 기본 제공 데이터 원본 컨트롤이 포함 되어 있습니다.

그림 1: ASP.NET 2.0에는 5 가지 기본 제공 데이터 원본 컨트롤이 포함 되어 있습니다.Figure 1: ASP.NET 2.0 Includes Five Built-In Data Source Controls

ObjectDataSource 및 SqlDataSource 비교Comparing the ObjectDataSource and SqlDataSource

개념적으로 ObjectDataSource 컨트롤과 SqlDataSource 컨트롤은 단순히 데이터에 대 한 프록시입니다.Conceptually, both the ObjectDataSource and SqlDataSource controls are simply proxies to data. ObjectDataSource를 사용 하 여 데이터 표시 에 설명 된 것 처럼 objectdatasource에는 데이터를 제공 하는 개체 형식 및 내부 개체 형식에서 데이터를 선택, 삽입, 업데이트 및 삭제 하기 위해 호출할 메서드를 나타내는 속성이 있습니다.As discussed in the Displaying Data With the ObjectDataSource tutorial, the ObjectDataSource has properties that indicate the object type that provides the data and the methods to invoke to select, insert, update, and delete data from the underlying object type. ObjectDataSource 속성이 구성 되 면 GridView, DetailsView 또는 DataList와 같은 데이터 웹 컨트롤을 컨트롤에 바인딩할 수 있습니다. 이때 ObjectDataSource s Select(), Insert(), Delete()Update() 메서드를 사용 하 여 기본 아키텍처와 상호 작용할 수 있습니다.Once the ObjectDataSource s properties have been configured, a data Web control such as a GridView, DetailsView, or DataList can be bound to the control, using the ObjectDataSource s Select(), Insert(), Delete(), and Update() methods to interact with the underlying architecture.

SqlDataSource는 동일한 기능을 제공 하지만 개체 라이브러리가 아닌 관계형 데이터베이스에 대해 작동 합니다.The SqlDataSource provides the same functionality, but operates against a relational database rather than an object library. SqlDataSource를 사용 하 여 데이터를 삽입, 업데이트, 삭제 및 검색 하기 위해 실행할 데이터베이스 연결 문자열과 임시 SQL 쿼리 또는 저장 프로시저를 지정 해야 합니다.With the SqlDataSource, we must specify the database connection string and the ad-hoc SQL queries or stored procedures to execute to insert, update, delete, and retrieve data. SqlDataSource s Select(), Insert(), Update()Delete() 메서드를 호출 하면 지정 된 데이터베이스에 연결 하 여 적절 한 SQL 쿼리를 실행 합니다.The SqlDataSource s Select(), Insert(), Update(), and Delete() methods, when invoked, connect to the specified database and issue the appropriate SQL query. 다음 다이어그램에 나와 있는 것 처럼 이러한 메서드는 데이터베이스에 연결 하 고 쿼리를 실행 하 고 결과를 반환 하는 grunt 작업을 수행 합니다.As the following diagram illustrates, the these methods do the grunt work of connecting to a database, issuing a query, and returning the results.

SqlDataSource는 데이터베이스에 대 한 프록시로 사용 됩니다.

그림 2: SqlDataSource는 데이터베이스에 대 한 프록시로 사용 됩니다.Figure 2: The SqlDataSource Serves as a Proxy to the Database

Note

이 자습서에서는 데이터베이스에서 데이터를 검색 하는 방법을 집중적으로 설명 합니다.In this tutorial we'll focus on retrieving data from the database. SqlDataSource 컨트롤 자습서를 사용 하 여 데이터 삽입, 업데이트 및 삭제 에서 삽입, 업데이트 및 삭제를 지원 하도록 sqldatasource를 구성 하는 방법을 살펴보겠습니다.In the Inserting, Updating, and Deleting Data with the SqlDataSource Control tutorial, we'll see how to configure the SqlDataSource to support inserting, updating, and deleting.

SqlDataSource 및 AccessDataSource 컨트롤The SqlDataSource and AccessDataSource Controls

SqlDataSource 컨트롤 외에도 ASP.NET 2.0에는 AccessDataSource 컨트롤이 포함 되어 있습니다.In addition to the SqlDataSource control, ASP.NET 2.0 also includes an AccessDataSource control. 이러한 두 가지 다른 컨트롤은 ASP.NET 2.0의 새로운 개발자를 위한 것으로, AccessDataSource 컨트롤이 Microsoft SQL Server만 사용 하도록 디자인 된 SqlDataSource 컨트롤을 사용 하 여 Microsoft 액세스와 독점적으로 작동 하도록 설계 되었습니다.These two different controls lead many developers new to ASP.NET 2.0 to suspect that the AccessDataSource control is designed to work exclusively with Microsoft Access with the SqlDataSource control designed to work exclusively with Microsoft SQL Server. AccessDataSource은 Microsoft Access에서 특별히 작동 하도록 설계 되었지만, SqlDataSource 컨트롤은 .NET을 통해 액세스할 수 있는 모든 관계형 데이터베이스에서 작동 합니다.While the AccessDataSource is designed to work specifically with Microsoft Access, the SqlDataSource control works with any relational database that can be accessed through .NET. 여기에는 Microsoft SQL Server, Microsoft Access, Oracle, Informix, MySQL, PostgreSQL 등의 다양 한 OleDb 또는 ODBC 규격 데이터 저장소가 포함 됩니다.This includes any OleDb- or ODBC-compliant data stores, such as Microsoft SQL Server, Microsoft Access, Oracle, Informix, MySQL, and PostgreSQL, among many others.

AccessDataSource 및 SqlDataSource 컨트롤의 유일한 차이점은 데이터베이스 연결 정보를 지정 하는 방법입니다.The sole difference between the AccessDataSource and SqlDataSource controls is how the database connection information is specified. AccessDataSource 컨트롤에는 Access 데이터베이스 파일에 대 한 파일 경로만 필요 합니다.The AccessDataSource control needs just the file path to the Access database file. 반면에 SqlDataSource에는 완전 한 연결 문자열이 필요 합니다.The SqlDataSource, on the other hand, requires a complete connection string.

1 단계: SqlDataSource 웹 페이지 만들기Step 1: Creating the SqlDataSource Web Pages

SqlDataSource 컨트롤을 사용 하 여 데이터베이스 데이터를 직접 사용 하는 방법에 대 한 탐색을 시작 하기 전에 먼저이 자습서와 다음 3 개에 필요한 웹 사이트 프로젝트에 ASP.NET 페이지를 만들어 보겠습니다.Before we start exploring how to work directly with database data using the SqlDataSource control, let s first take a moment to create the ASP.NET pages in our website project that we'll need for this tutorial and the next three. SqlDataSource이라는 새 폴더를 추가 하 여 시작 합니다.Start by adding a new folder named SqlDataSource. 그런 다음, 다음 ASP.NET 페이지를 해당 폴더에 추가 하 여 각 페이지를 Site.master 마스터 페이지에 연결 합니다.Next, add the following ASP.NET pages to that folder, making sure to associate each page with the Site.master master page:

  • Default.aspx
  • Querying.aspx
  • ParameterizedQueries.aspx
  • InsertUpdateDelete.aspx
  • OptimisticConcurrency.aspx

SqlDataSource 관련 자습서에 대 한 ASP.NET 페이지 추가

그림 3: SqlDataSource 관련 자습서에 대 한 ASP.NET 페이지 추가Figure 3: Add the ASP.NET Pages for the SqlDataSource-Related Tutorials

다른 폴더와 마찬가지로 SqlDataSource 폴더의 Default.aspx에는 해당 섹션의 자습서가 나열 됩니다.Like in the other folders, Default.aspx in the SqlDataSource folder will list the tutorials in its section. SectionLevelTutorialListing.ascx 사용자 정의 컨트롤은이 기능을 제공 합니다.Recall that the SectionLevelTutorialListing.ascx User Control provides this functionality. 따라서이 사용자 정의 컨트롤을 솔루션 탐색기에서 페이지 디자인 뷰로 끌어 Default.aspx에 추가 합니다.Therefore, add this User Control to Default.aspx by dragging it from the Solution Explorer onto the page s Design view.

SectionLevelTutorialListing 사용자 정의 컨트롤을 Default.aspx에 추가 Add the SectionLevelTutorialListing.ascx User Control to Default.aspx

그림 4: Default.aspxSectionLevelTutorialListing.ascx 사용자 정의 컨트롤 추가 (전체 크기 이미지를 보려면 클릭)Figure 4: Add the SectionLevelTutorialListing.ascx User Control to Default.aspx (Click to view full-size image)

마지막으로, 이러한 4 개의 페이지를 Web.sitemap 파일에 항목으로 추가 합니다.Lastly, add these four pages as entries to the Web.sitemap file. 특히 DataList 및 Repeater <siteMapNode>에 사용자 지정 단추를 추가한 후 다음 태그를 추가 합니다.Specifically, add the following markup after the Adding Custom Buttons to the DataList and Repeater <siteMapNode>:

<siteMapNode url="~/SqlDataSource/Default.aspx"
    title="Using the SqlDataSource Control"
    description="Work directly with database data using the SqlDataSource control.">
    <siteMapNode url="~/SqlDataSource/Querying.aspx" title="Retrieving Database Data"
        description="Examines how to query data from a database that can then be
                     displayed  through a data Web control."/>
    <siteMapNode url="~/SqlDataSource/ParameterizedQueries.aspx"
        title="Parameterized Queries"
        description="Learn how to specify parameterized WHERE clauses in the
                     SqlDataSource's SELECT statement." />
    <siteMapNode url="~/SqlDataSource/InsertUpdateDelete.aspx"
        title="Inserting, Updating, and Deleting Database Data"
        description="See how to configure the SqlDataSource to include INSERT, UPDATE,
                      and DELETE statements." />
    <siteMapNode url="~/SqlDataSource/OptimisticConcurrency.aspx"
        title="Using Optimistic Concurrency"
        description="Explore how to augment the SqlDataSource to include support for
                     optimistic concurrency." />
</siteMapNode>

Web.sitemap업데이트 한 후 브라우저를 통해 자습서 웹 사이트를 잠시 기다려 주십시오.After updating Web.sitemap, take a moment to view the tutorials website through a browser. 이제 왼쪽의 메뉴에는 자습서 편집, 삽입 및 삭제를 위한 항목이 포함 되어 있습니다.The menu on the left now includes items for the editing, inserting, and deleting tutorials.

이제 사이트 맵에 SqlDataSource 자습서에 대 한 항목이 포함 되어 있습니다.

그림 5: 이제 사이트 맵에 SqlDataSource 자습서에 대 한 항목이 포함 되어 있습니다.Figure 5: The Site Map Now Includes Entries for the SqlDataSource Tutorials

2 단계: SqlDataSource 컨트롤 추가 및 구성Step 2: Adding and Configuring the SqlDataSource Control

먼저 SqlDataSource 폴더에서 Querying.aspx 페이지를 열고 디자인 뷰로 전환 합니다.Start by opening the Querying.aspx page in the SqlDataSource folder and switch to Design view. SqlDataSource 컨트롤을 도구 상자에서 디자이너로 끌고 IDProductsDataSource로 설정 합니다.Drag a SqlDataSource control from the Toolbox onto the Designer and set its ID to ProductsDataSource. ObjectDataSource와 마찬가지로 SqlDataSource는 렌더링 된 출력을 생성 하지 않으므로 디자인 화면에 회색 상자로 표시 됩니다.As with the ObjectDataSource, the SqlDataSource does not produce any rendered output and therefore appears as a gray box on the design surface. SqlDataSource를 구성 하려면 SqlDataSource s 스마트 태그에서 데이터 원본 구성 링크를 클릭 합니다.To configure the SqlDataSource, click on the Configure Data Source link from the SqlDataSource s smart tag.

SqlDataSource s 스마트 태그에서 데이터 소스 구성 링크를 클릭 합니다.

그림 6: SqlDataSource의 스마트 태그에서 데이터 소스 구성 링크를 클릭 합니다.Figure 6: Click on the Configure Data Source Link from the SqlDataSource s Smart Tag

이렇게 하면 SqlDataSource 컨트롤의 데이터 소스 구성 마법사가 열립니다.This brings up the SqlDataSource control s Configure Data Source wizard. 마법사의 단계는 ObjectDataSource 제어와 다르지만 최종 목표는 데이터 원본을 통해 데이터를 검색, 삽입, 업데이트 및 삭제 하는 방법에 대 한 세부 정보를 제공 하는 것과 같습니다.While the wizard s steps differ from the ObjectDataSource control s, the end goal is the same to provide the details on how to retrieve, insert, update, and delete data through the data source. SqlDataSource의 경우 사용할 기본 데이터베이스를 지정 하 고 임시 SQL 문이나 저장 프로시저를 제공 해야 합니다.For the SqlDataSource this entails specifying the underlying database to use and providing the ad-hoc SQL statements or stored procedures.

첫 번째 마법사 단계에서는 데이터베이스를 묻는 메시지를 표시 합니다.The first wizard step prompts us for the database. 드롭다운 목록에는 웹 응용 프로그램 App_Data 폴더에 있는 데이터베이스와 서버 탐색기의 데이터 연결 노드에 추가 된 데이터베이스가 포함 됩니다.The drop-down list includes those databases found in the web application s App_Data folder and those that have been added to the Data Connections node in the Server Explorer. App_Data 폴더의 NORTHWIND.MDF 데이터베이스에 대 한 연결 문자열을 프로젝트 Web.config 파일에 이미 추가 했으므로 드롭다운 목록에는 NORTHWINDConnectionString해당 연결 문자열에 대 한 참조가 포함 되어 있습니다.Since we ve already added a connection string for the NORTHWIND.MDF database in the App_Data folder to our project s Web.config file, the drop-down list includes a reference to that connection string, NORTHWINDConnectionString. 드롭다운 목록에서이 항목을 선택 하 고 다음을 클릭 합니다.Choose this item from the drop-down list and click Next.

드롭다운 목록에서 NORTHWINDConnectionString를 선택 합니다.

그림 7: 드롭다운 목록에서 NORTHWINDConnectionString 선택Figure 7: Choose the NORTHWINDConnectionString from the Drop-Down List

데이터베이스를 선택 하면 마법사에서 데이터를 반환 하는 쿼리를 요청 합니다.After choosing the database, the wizard asks for the query to return data. 반환할 테이블이 나 뷰의 열을 지정 하거나 사용자 지정 SQL 문을 입력 하거나 저장 프로시저를 지정할 수 있습니다.We can either specify the columns of a table or view to return or can enter a custom SQL statement or specify a stored procedure. 사용자 지정 SQL 문 또는 저장 프로시저 지정 및 테이블에서 열 지정 또는 보기 라디오 단추를 통해이 선택 사이를 전환할 수 있습니다.You can toggle between this choice through the Specify a custom SQL statement or stored procedure and Specify columns from a table or view radio buttons.

Note

이 첫 번째 예에서는 테이블 또는 뷰에서 열 지정 옵션을 사용 합니다.For this first example, let s use the Specify columns from a table or view option. 이 자습서의 뒷부분에서 마법사로 돌아가 사용자 지정 SQL 문 또는 저장 프로시저 지정 옵션을 탐색 합니다.We'll return to the wizard later in this tutorial and explore the Specify a custom SQL statement or stored procedure option.

그림 8에서는 테이블 또는 뷰에서 열 지정 라디오 단추를 선택할 때 Select 문 구성 화면을 보여 줍니다.Figure 8 shows the Configure the Select Statement screen when the Specify columns from a table or view radio button is selected. 드롭다운 목록에는 Northwind 데이터베이스에 있는 테이블 및 뷰 집합이 포함 되어 있으며,이 목록에는 선택한 테이블 또는 뷰 s 열이 아래에 있는 확인란 목록에 표시 됩니다.The drop-down list contains the set of tables and views in the Northwind database, with the selected table or view s columns displayed in the checkbox list below. 이 예에서는 s를 사용 하 여 Products 테이블에서 ProductID, ProductNameUnitPrice 열을 반환 합니다.For this example, let s return the ProductID, ProductName, and UnitPrice columns from the Products table. 그림 8에 나와 있는 것 처럼 이러한 항목을 선택 하면 마법사에서 결과 SQL 문을 SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]표시 합니다.As Figure 8 shows, after making these selections the wizard shows the resulting SQL statement SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products].

Products 테이블에서 데이터 반환

그림 8: Products 테이블에서 데이터 반환Figure 8: Return Data from the Products Table

마법사에서 Products 테이블의 ProductID, ProductNameUnitPrice 열을 반환 하도록 구성한 후에는 다음 단추를 클릭 합니다.Once you have configured the wizard to return the ProductID, ProductName, and UnitPrice columns from the Products table, click the Next button. 이 마지막 화면에서는 이전 단계에서 구성 된 쿼리 결과를 검토할 수 있는 기회를 제공 합니다.This final screen provides an opportunity to examine the results of the query configured from the previous step. 쿼리 테스트 단추를 클릭 하면 구성 된 SELECT 문이 실행 되 고 결과가 표에 표시 됩니다.Clicking the Test Query button executes the configured SELECT statement and displays the results in a grid.

쿼리 테스트 단추를 클릭 하 여 선택 쿼리를 검토 합니다.

그림 9: 쿼리 테스트 단추를 클릭 하 SELECT 쿼리를 검토 합니다.Figure 9: Click the Test Query Button to Review Your SELECT Query

마법사를 완료하려면 마침을 클릭합니다.To complete the wizard, click Finish.

ObjectDataSource와 마찬가지로, SqlDataSource 마법사는 컨트롤 속성 ( ConnectionStringSelectCommand 속성)에 값을 할당 하기만 합니다.Like with the ObjectDataSource, the SqlDataSource s wizard merely assigns values to the control s properties, namely the ConnectionString and SelectCommand properties. 마법사를 완료 한 후에는 SqlDataSource 컨트롤의 선언적 태그가 다음과 같이 표시 됩니다.After completing the wizard, your SqlDataSource control s declarative markup should look similar to the following:

<asp:SqlDataSource ID="ProductsDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]">
</asp:SqlDataSource>

ConnectionString 속성은 데이터베이스에 연결 하는 방법에 대 한 정보를 제공 합니다.The ConnectionString property provides information on how to connect to the database. 이 속성에는 하드 코드 된 전체 연결 문자열 값을 할당 하거나 Web.config연결 문자열을 가리킬 수 있습니다.This property can be assigned a complete, hard-coded connection string value or can point to a connection string in Web.config. Web.config에서 연결 문자열 값을 참조 하려면 <%$ expressionPrefix:expressionValue %>구문을 사용 합니다.To reference a connection string value in Web.config, use the syntax <%$ expressionPrefix:expressionValue %>. 일반적으로 Expressionprefix 는 ConnectionStrings이 고 expressionprefixWeb.config <connectionStrings> 섹션에 있는 연결 문자열의 이름입니다.Typically, expressionPrefix is ConnectionStrings and expressionValue is the name of the connect string in the Web.config <connectionStrings> section. 그러나 구문을 사용 하 여 리소스 파일에서 <appSettings> 요소나 콘텐츠를 참조할 수 있습니다.However, the syntax can be used to reference <appSettings> elements or content from resource files. 이 구문에 대 한 자세한 내용은 ASP.NET 식 개요 를 참조 하세요.See ASP.NET Expressions Overview for more on this syntax.

SelectCommand 속성은 데이터를 반환 하기 위해 실행할 임시 SQL 문이나 저장 프로시저를 지정 합니다.The SelectCommand property specifies the ad-hoc SQL statement or stored procedure to execute to return the data.

3 단계: 데이터 웹 컨트롤을 추가 하 고 SqlDataSource에 바인딩Step 3: Adding a Data Web Control and Binding it to the SqlDataSource

SqlDataSource가 구성 되 면 GridView 또는 DetailsView과 같은 데이터 웹 컨트롤에 바인딩될 수 있습니다.Once the SqlDataSource has been configured, it can be bound to a data Web control, such as a GridView or DetailsView. 이 자습서에서는 s를 GridView에 표시 합니다.For this tutorial, let s display the data in a GridView. 도구 상자에서 GridView를 페이지로 끌어온 다음 GridView의 스마트 태그에 있는 드롭다운 목록에서 데이터 원본을 선택 하 여 ProductsDataSource SqlDataSource에 바인딩합니다.From the Toolbox, drag a GridView onto the page and bind it to the ProductsDataSource SqlDataSource by choosing the data source from the drop-down list in the GridView s smart tag.

GridView를 추가 SqlDataSource 컨트롤에 바인딩Add a GridView and Bind it to the SqlDataSource Control

그림 10: GridView를 추가 하 고 SqlDataSource 컨트롤에 바인딩 (전체 크기 이미지를 보려면 클릭)Figure 10: Add a GridView and Bind it to the SqlDataSource Control (Click to view full-size image)

GridView s 스마트 태그의 드롭다운 목록에서 SqlDataSource 컨트롤을 선택 하면 Visual Studio에서 데이터 소스 컨트롤에서 반환 하는 각 열에 대해 BoundField 또는 CheckBoxField를 GridView에 자동으로 추가 합니다.Once you ve selected the SqlDataSource control from the drop-down list in the GridView s smart tag, Visual Studio will automatically add a BoundField or CheckBoxField to the GridView for each of the columns returned by the data source control. SqlDataSource는 UnitPrice ProductName``ProductID3 개의 데이터베이스 열을 반환 하므로 GridView에는 세 개의 필드가 있습니다.Since the SqlDataSource returns three database columns ProductID, ProductName, and UnitPrice there are three fields in the GridView.

잠시 후 GridView s BoundFields를 구성 합니다.Take a moment to configure the GridView s three BoundFields. ProductName field s HeaderText 속성을 Product Name으로 변경 하 고 UnitPrice 필드를 Price로 변경 합니다.Change the ProductName field s HeaderText property to Product Name and the UnitPrice field s to Price. 또한 UnitPrice 필드의 서식을 통화로 지정 합니다.Also format the UnitPrice field as a currency. 이러한 수정 작업을 수행한 후 GridView의 선언 태그는 다음과 유사 하 게 표시 됩니다.After making these modifications, your GridView s declarative markup should look similar to the following:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    DataKeyNames="ProductID" DataSourceID="ProductsDataSource"
    EnableViewState="False">
    <Columns>
        <asp:BoundField DataField="ProductID" HeaderText="ProductID"
            InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName" HeaderText="Product Name"
            SortExpression="ProductName" />
        <asp:BoundField DataField="UnitPrice" HeaderText="Price"
            SortExpression="UnitPrice" DataFormatString="{0:c}"
            HtmlEncode="False" />
    </Columns>
</asp:GridView>

브라우저를 통해이 페이지를 방문 하세요.Visit this page through a browser. 그림 11에 나와 있는 것 처럼 GridView는 각 제품 ProductID, ProductNameUnitPrice 값을 나열 합니다.As Figure 11 shows, the GridView lists each product s ProductID, ProductName, and UnitPrice values.

GridView 각 제품의 ProductID, ProductName 및 UnitPrice 값을 표시 합니다.The GridView Displays Each Product s ProductID, ProductName, and UnitPrice Values

그림 11: GridView는 각 제품 ProductID, ProductNameUnitPrice 값을 표시 합니다 (전체 크기 이미지를 보려면 클릭).Figure 11: The GridView Displays Each Product s ProductID, ProductName, and UnitPrice Values (Click to view full-size image)

페이지를 방문한 후 GridView는 해당 데이터 소스 컨트롤 Select() 메서드를 호출 합니다.When the page is visited the GridView invokes its data source control s Select() method. ObjectDataSource 컨트롤을 사용 하는 경우 ProductsBLL 클래스 GetProducts() 메서드 라고 합니다.When we were using the ObjectDataSource control, this called the ProductsBLL class s GetProducts() method. 그러나 SqlDataSource를 사용 하는 경우 Select() 메서드는 지정 된 데이터베이스에 대 한 연결을 설정 하 고 SelectCommand (이 예에서는SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products])를 발급 합니다.With the SqlDataSource, however, the Select() method establishes a connection to the specified database and issues the SelectCommand (SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products], in this example). SqlDataSource는 GridView가 반환 하는 결과를 반환 합니다. 그러면 gridview에서 반환 된 각 데이터베이스 레코드에 대 한 행을 만듭니다.The SqlDataSource returns its results which the GridView then enumerates, creating a row in the GridView for each database record returned.

기본 제공 데이터 웹 컨트롤 기능 및 SqlDataSource 컨트롤The Built-In Data Web Control Features and the SqlDataSource Control

일반적으로 데이터 웹 컨트롤에 내재 된 기능 (페이징, 정렬, 편집, 삭제, 삽입 등)은 데이터 웹 컨트롤에만 적용 되며 사용 되는 데이터 소스 컨트롤에는 종속 되지 않습니다.In general, the features inherent to the data Web controls paging, sorting, editing, deleting, inserting, and so on are specific to the data Web control and are not dependent on the data source control used. 즉, GridView는 ObjectDataSource 또는 SqlDataSource에 바인딩되어 있는지 여부에 관계 없이 기본 제공 페이징, 정렬, 편집 및 삭제를 활용할 수 있습니다.That is, the GridView can utilize its built-in paging, sorting, editing, and deleting whether it is bound to an ObjectDataSource or a SqlDataSource. 그러나 특정 데이터 웹 컨트롤 기능은 사용 하는 데이터 소스 컨트롤이 나 데이터 소스 컨트롤의 구성에 따라 구분 됩니다.However, certain data Web control features are sensitive to the data source control being used or to the data source control s configuration.

예를 들어 많은 양의 데이터를 효율적으로 페이징 하는 자습서에서는 기본적으로 데이터 웹 컨트롤에 대 한 페이징 논리가 기본 데이터 원본에서 모든 레코드를 반환 하는 방법에 대해 설명 했습니다. 그러면 현재 페이지 인덱스와 페이지당 표시할 레코드 수에 해당 하는 레코드의 naively 해당 하위 집합만 표시 됩니다.For example, in the Efficiently Paging Through Large Amounts of Data tutorial we discussed how, by default, the paging logic for the data Web controls naively returns all records from the underlying data source and then displays only the appropriate subset of records given the current page index and the number of records to display per page. 이 모델은 충분히 큰 결과 집합을 페이징할 때 매우 비효율적입니다.This model is highly inefficient when paging through sufficiently large result sets. 다행히 ObjectDataSource는 표시할 레코드의 정확한 하위 집합만 반환 하는 사용자 지정 페이징을 지원 하도록 구성할 수 있습니다.Fortunately, the ObjectDataSource can be configured to support custom paging, which returns only the precise subset of records to display. 그러나 SqlDataSource 컨트롤에는 사용자 지정 페이징을 구현 하기 위한 속성이 없습니다.The SqlDataSource control, however, lacks the properties for implementing custom paging.

페이징 및 정렬이 있는 또 다른 미묘한는 SqlDataSource와 함께 발생 합니다.Another subtlety with paging and sorting arises with the SqlDataSource. 기본적으로 SqlDataSource에서 반환 된 데이터는 GridView를 통해 페이징 하거나 정렬할 수 있습니다.By default, the data returned from a SqlDataSource can be paged or sorted through the GridView. 이를 보여 주려면 Querying.aspx의 GridView s 스마트 태그에서 페이징 사용 및 정렬 사용 옵션을 선택 하 고 예상 대로 작동 하는지 확인 합니다.To demonstrate this, check the Enable Paging and Enable Sorting options in the GridView s smart tag in Querying.aspx and verify that this works as expected.

SqlDataSource가 데이터베이스 데이터를 느슨하게 형식화 된 데이터 집합으로 검색 하기 때문에 정렬 및 페이징이 작동 합니다.Sorting and paging works because the SqlDataSource retrieves the database data into a loosely-typed DataSet. 쿼리에서 반환 된 레코드의 총 수는 데이터 집합에서 페이징을 구현 하는 데 필수적인 부분을 이것이 winmd 수 있습니다.The total number of records returned by the query an essential aspect to implementing paging can be ascertained from the DataSet. 또한 데이터 집합의 결과는 DataView를 통해 정렬할 수 있습니다.Additionally, the DataSet s results can be sorted through a DataView. 이러한 기능은 GridView에서 페이징 또는 정렬 된 데이터를 요청할 때 SqlDataSource에서 자동으로 사용 됩니다.These capabilities are automatically used by the SqlDataSource when the GridView requests paged or sorted data.

SqlDataSource는 DataSourceMode 속성DataSet (기본값)에서 DataReader로 변경 하 여 데이터 집합 대신 DataReader를 반환 하도록 구성할 수 있습니다.The SqlDataSource can be configured to return a DataReader instead of a DataSet by changing its DataSourceMode property from DataSet (the default) to DataReader. Datareader를 예상 하는 기존 코드에 SqlDataSource를 전달 하는 경우 DataReader를 사용 하는 것이 좋습니다.Using a DataReader might be preferred in situations when passing the SqlDataSource s results to existing code that expects a DataReader. 또한 DataReaders는 데이터 집합 보다 훨씬 더 간단한 개체 이기 때문에 더 나은 성능을 제공 합니다.Furthermore, since DataReaders are considerably simpler objects than DataSets, they offer better performance. 그러나 이러한 변경을 수행 하는 경우에는 SqlDataSource가 쿼리에 의해 반환 된 레코드 수를 확인할 수 없고 DataReader에서 반환 된 데이터를 정렬 하는 기술을 제공 하지 않기 때문에 데이터 웹 컨트롤이 정렬과 페이지를 모두 사용 하지 못합니다.If you make this change, however, the data Web control can neither sort nor page since the SqlDataSource cannot ascertain how many records are returned by the query, nor does the DataReader offer any techniques for sorting the returned data.

4 단계: 사용자 지정 SQL 문 또는 저장 프로시저 사용Step 4: Using a Custom SQL Statement or Stored Procedure

SqlDataSource 컨트롤을 구성 하는 경우 데이터를 반환 하는 데 사용 되는 쿼리는 두 가지 방법 중 하나를 사용 하 여 사용자 지정 SQL 문 또는 저장 프로시저 또는 기존 테이블 또는 뷰의 열로 지정할 수 있습니다.When configuring the SqlDataSource control, the query used to return data can be specified in one of two approaches as a custom SQL statement or stored procedure, or as columns from an existing table or view. 2 단계에서는 Products 테이블에서 열을 선택 하는 것을 검토 했습니다.In Step 2 we examined selecting columns from the Products table. 사용자 지정 SQL 문을 사용 하 여 살펴보겠습니다.Let s look at using a custom SQL statement.

Querying.aspx 페이지에 다른 GridView 컨트롤을 추가 하 고 스마트 태그의 드롭다운 목록에서 새 데이터 소스를 만들도록 선택 합니다.Add another GridView control to the Querying.aspx page and choose to create a new data source from the drop-down list in the smart tag. 그런 다음 데이터베이스에서 데이터를 끌어올 것임을 지정 합니다. 이렇게 하면 새 SqlDataSource 컨트롤이 생성 됩니다.Next, indicate that the data will be pulled from a database this will create a new SqlDataSource control. 컨트롤의 이름을 ProductsWithCategoryInfoDataSource합니다.Name the control ProductsWithCategoryInfoDataSource.

ProductsWithCategoryInfoDataSource 라는 새 SqlDataSource 컨트롤을 만듭니다.

그림 12: ProductsWithCategoryInfoDataSource 라는 새 SqlDataSource 컨트롤 만들기Figure 12: Create a New SqlDataSource Control Named ProductsWithCategoryInfoDataSource

다음 화면에서는 데이터베이스를 지정 하 라는 메시지를 표시 합니다.The next screen asks us to specify the database. 그림 7에 나와 있는 것 처럼 드롭다운 목록에서 NORTHWINDConnectionString을 선택 하 고 다음을 클릭 합니다.As we did back in Figure 7, select the NORTHWINDConnectionString from the drop-down list and click Next. Select 문 구성 화면에서 사용자 지정 SQL 문 또는 저장 프로시저 지정 라디오 단추를 선택 하 고 다음을 클릭 합니다.In the Configure the Select Statement screen, choose the Specify a custom SQL statement or stored procedure radio button and click Next. 그러면 선택, 업데이트, 삽입 및 삭제 레이블이 지정 된 탭을 제공 하는 사용자 지정 문 또는 저장 프로시저 정의 화면이 표시 됩니다.This will bring up the Define Custom Statements or Stored Procedures screen, which offers tabs labeled SELECT, UPDATE, INSERT, and DELETE. 각 탭에서 텍스트 상자에 사용자 지정 SQL 문을 입력 하거나 드롭다운 목록에서 저장 프로시저를 선택할 수 있습니다.In each tab you can enter a custom SQL statement into the textbox or choose a stored procedure from the drop-down list. 이 자습서에서는 사용자 지정 SQL 문 입력을 살펴보겠습니다. 다음 자습서에는 저장 프로시저를 사용 하는 예가 포함 되어 있습니다.In this tutorial we will look at entering a custom SQL statement; the next tutorial includes an example that uses a stored procedure.

사용자 지정 SQL 문을 입력 하거나 저장 프로시저를 선택 하십시오.

그림 13: 사용자 지정 SQL 문 입력 또는 저장 프로시저 선택Figure 13: Enter a Custom SQL Statement or Pick a Stored Procedure

사용자 지정 SQL 문은 텍스트 상자에 직접 입력 하거나 쿼리 작성기 단추를 클릭 하 여 그래픽으로 생성할 수 있습니다.The custom SQL statement can be entered by hand into the textbox or can be constructed graphically by clicking the Query Builder button. 쿼리 작성기 또는 텍스트 상자에서 다음 쿼리를 사용 하 여 JOIN 테이블에서 제품 CategoryName를 검색 하는 Categories를 사용 하 여 Products 테이블에서 ProductIDProductName 필드를 반환 합니다.From either the Query Builder or the textbox, use the following query to return the ProductID and ProductName fields from the Products table using a JOIN to retrieve the product s CategoryName from the Categories table:

SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Categories
    INNER JOIN Products ON
        Categories.CategoryID = Products.CategoryID

쿼리 작성기를 사용 하 여 쿼리를 그래픽으로 생성할 수 있습니다.

그림 14: 쿼리 작성기를 사용 하 여 쿼리를 그래픽으로 생성할 수 있습니다.Figure 14: You can Graphically Construct the Query Using the Query Builder

쿼리를 지정한 후 다음을 클릭 하 여 쿼리 테스트 화면으로 이동 합니다.After specifying the query, click Next to proceed to the Test Query screen. 마침을 클릭 하 여 SqlDataSource 마법사를 완료 합니다.Click Finish to complete the SqlDataSource wizard.

마법사를 완료 한 후 GridView에는 쿼리에서 반환 된 ProductID, ProductNameCategoryName 열을 표시 하 고 다음과 같은 선언 태그를 표시 하는 세 개의 BoundFields 추가 됩니다.After completing the wizard, the GridView will have three BoundFields added to it displaying the ProductID, ProductName, and CategoryName columns returned from the query and resulting in the following declarative markup:

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
    DataKeyNames="ProductID" DataSourceID="ProductsWithCategoryInfoDataSource"
    EnableViewState="False">
    <Columns>
        <asp:BoundField DataField="ProductID" HeaderText="ProductID"
            InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName" HeaderText="ProductName"
            SortExpression="ProductName" />
        <asp:BoundField DataField="CategoryName" HeaderText="CategoryName"
            SortExpression="CategoryName" />
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="ProductsWithCategoryInfoDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    SelectCommand="
        SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
        FROM Categories
        INNER JOIN Products ON Categories.CategoryID = Products.CategoryID">
</asp:SqlDataSource>

GridView 각 제품의 ID, 이름 및 연결 된 범주 이름을 표시 합니다.The GridView Shows Each Product s ID, Name, and Associated Category Name

그림 15: GridView는 각 제품의 ID, 이름 및 연결 된 범주 이름을 표시 합니다 (전체 크기 이미지를 보려면 클릭).Figure 15: The GridView Shows Each Product s ID, Name, and Associated Category Name (Click to view full-size image)

요약Summary

이 자습서에서는 SqlDataSource 컨트롤을 사용 하 여 데이터를 쿼리하고 표시 하는 방법을 살펴보았습니다.In this tutorial we saw how to query and display data using the SqlDataSource control. ObjectDataSource와 마찬가지로, SqlDataSource는 프록시 역할을 하 여 데이터에 액세스 하는 선언적 방법을 제공 합니다.Like the ObjectDataSource, the SqlDataSource serves as a proxy, providing a declarative approach to accessing data. 해당 속성은 연결할 데이터베이스와 실행할 SQL SELECT 쿼리를 지정 합니다. 속성 창 또는 데이터 원본 구성 마법사를 사용 하 여 지정할 수 있습니다.Its properties specify the database to connect to and the SQL SELECT query to execute; they can be specified through the Properties window or by using the Configure DataSource wizard.

이 자습서에서 검사 한 SELECT 쿼리 예제는 지정 된 쿼리의 모든 레코드를 반환 했습니다.The SELECT query examples we examined in this tutorial returned all of the records from the specified query. 그러나 SqlDataSource 컨트롤에는 해당 값을 프로그래밍 방식으로 할당 하거나 지정 된 소스에서 자동으로 가져오는 매개 변수가 있는 WHERE 절이 포함 될 수 있습니다.The SqlDataSource control, however, can include a WHERE clause with parameters whose values are assigned programmatically or are automatically pulled from a specified source. 다음 자습서에서 매개 변수가 있는 쿼리를 만들고 사용 하는 방법을 살펴보겠습니다.We'll examine how to create and use parameterized queries in the next tutorial!

행복 한 프로그래밍Happy Programming!

추가 참고 자료Further Reading

이 자습서에서 설명 하는 항목에 대 한 자세한 내용은 다음 리소스를 참조 하세요.For more information on the topics discussed in this tutorial, refer to the following resources:

저자 정보About the Author

Scott Mitchell(7 개의 ASP/ASP. NET books 및 4GuysFromRolla.com창립자)은 1998부터 Microsoft 웹 기술을 사용 하 여 작업 했습니다.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott은 독립 컨설턴트, 강사 및 기록기로 작동 합니다.Scott works as an independent consultant, trainer, and writer. 최신 책은 24 시간 이내에 ASP.NET 2.0을 sams teach yourself것입니다.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. mitchell@4GuysFromRolla.com에 도달할 수 있습니다 .He can be reached at mitchell@4GuysFromRolla.com. 또는 블로그를 통해 http://ScottOnWriting.NET에서 찾을 수 있습니다.or via his blog, which can be found at http://ScottOnWriting.NET.

특별히 감사 합니다.Special Thanks To

이 자습서 시리즈는 많은 유용한 검토자가 검토 했습니다.This tutorial series was reviewed by many helpful reviewers. 이 자습서에 대 한 잠재 고객 검토자는 김소미 Connery, Bernadette Leigh 및 David Suru입니다.Lead reviewers for this tutorial were Susan Connery, Bernadette Leigh, and David Suru. 예정 된 MSDN 문서를 검토 하는 데 관심이 있나요?Interested in reviewing my upcoming MSDN articles? 그렇다면mitchell@4GuysFromRolla.com에서 줄을 삭제 합니다.If so, drop me a line at mitchell@4GuysFromRolla.com.