방법: 만들기 및 C#.NET을 사용 하 여 형식화 된 데이터 집합을 사용 합니다.

요약

이 문서에서는 만들고 형식화 된 DataSet 작은 웹 응용 프로그램에서 사용 하는 방법입니다. 형식화 된 데이터 집합DataSet 클래스에서 상속 하는 데이터 집합DatatableDataColumns를 강력한 형식화를 사용 하 여 제공 되는 많은 장점을 찼거나 고급 구성원 만들기

요구 사항

다음 항목은 권장 되는 하드웨어, 소프트웨어, 네트워크 인프라, 기술과 지식 및 다음이 단계를 완료 하는 데 필요한 서비스 팩 설명입니다.
  • Microsoft SQL Server 6.5 이상 Northwind 데이터베이스를 사용 하 여
필요한 이전 기술:
  • Microsoft SQL Server 대 한 일반 지식
  • Microsoft Visual Studio.NET에 대 한 일반 지식
  • Microsoft ADO.NET에 대 한 일반 지식
  • Microsoft.NET 웹 컨트롤에 대 한 일반 지식

형식화 된 데이터 집합

Visual Studio.NET을 사용 하 여 작은 웹 응용 프로그램을 만들려면 다음이 단계를 수행 합니다. 웹 응용 프로그램은 Northwind 데이터베이스의 임시 SQL 쿼리 결과 표시 하려면 형식화 된 데이터 집합 을 사용 합니다.
  1. Visual Studio.NET을 시작 합니다.
  2. C# NET에서 TDS 라는 새 웹 응용 프로그램 프로젝트를 만듭니다.
  3. 솔루션 탐색기 표시 되는지 확인 하십시오. 솔루션 탐색기에 표시 되지 않으면 CTRL + ALT + L을 누릅니다.
  4. 편집기 창에서 WebForm1.aspx 파일이 열려 있는지 확인 하십시오. 파일이 열려 있지 않으면 파일을 열려면 솔루션 탐색기에서 WebForm1.aspx 두 번 클릭 합니다.
  5. 편집기 창에서 디자인 보기로 전환 하려면 디자인 클릭 합니다.
  6. 도구 상자를 열려면 CTRL + ALT + X를 누릅니다. 도구 상자에서 Web Forms을 클릭 합니다. 선택 하 고 다음 페이지의 왼쪽 위 모서리를 끕니다: 각 레이블 (각 레이블의 오른쪽에 배치) 텍스트 상자 뒤에 두 행. 이러한 경우에서 마찬가지로 DataGrid 를 추가 합니다.
  7. 위쪽 레이블을 클릭 합니다. 속성 창을 표시 하려면 F4 키를 누릅니다. Text 속성Product 로 변경 합니다. 다른 레이블을 클릭 한 다음 범주해당 Text 속성 을 변경 합니다.
  8. 프로젝트에 새 데이터 집합 을 추가 하려면 CTRL + SHIFT + A 누르고 템플릿 목록에서 데이터 집합 을 클릭 합니다. 다음 데이터 집합 의 이름을: dsProducts.xsd. XML 스키마 실제로 임을 참고. 확인을 클릭합니다. 이제 편집기 창에서 흐린 노란색 페이지를 참조.
  9. 형식화 된 데이터 집합을 만들려면 서버 탐색기를 열려면 CTRL + ALT + S를 누릅니다.
  10. 서버 컴퓨터 이름을 클릭, SQLServers, 서버 이름을 클릭, Northwind클릭을 다음 보기를 클릭 합니다.
  11. Northwind SQL Server 보기 사전순 제품 목록선택 하 고 뷰 흐린 노란색 데이터 집합 페이지를 드래그 합니다. 시각적으로 보기에서 생성 되는 결과 집합에서 페이지에 나타납니다. 스키마 파일의 실제 XML 편집기 창에서 XML 단추 클릭을.
  12. SQL Server 개체를 기반으로 스키마에 존재 합니다. 먼저 만들고 형식화 된 데이터 집합을 작성 하는 스키마에 매핑되는 클래스를 생성 해야 합니다. 디자인 뷰를 마우스 오른쪽 단추로 클릭 한 다음 데이터 집합 생성 옵션이 선택 되어 있는지 확인 합니다. 선택 하지 않은 경우 선택 합니다. 스키마를 저장 하 고 클래스를 생성 하려면 CTRL + S를 누릅니다.
  13. 새 형식화 된 데이터 집합 클래스를 보려면 솔루션 탐색기에서 모든 파일 표시 클릭 합니다.
  14. DsProducts.xsd옆의 트리를 확장 합니다. 새 클래스 매핑 스키마에 포함 된 dsProducts.vb 파일을 참조 하십시오. 또한 파일에 변경 내용을 추적 하는 데 사용 되는 dsProducts.xsx 파일을 참조 하십시오.
  15. 형식화 된 데이터 집합을 표시 하는 코드를 작성 하려면 (웹 컨트롤)에 없는 Web Form에서 직접 두 번 클릭 합니다. Web Form의 코드 숨김 나타나고 삽입 포인터가 Page_Load 이벤트 내.
  16. 프로시저가 네임 스페이스에 있는 클래스를 포함 하려면 코드 숨김 파일의 맨 앞에 다음 using 문을 추가 합니다.
    using System.Data.SqlClient;
    참고: Visual Studio.NET에서 웹 응용 프로그램을 만들 때 프로젝트에는 다른 네임 스페이스는이 작은 웹 응용 프로그램에 자동으로 참조 됩니다.

  17. Page_Load 이벤트 프로시저에서 SqlConnection 클래스의 기본 생성자를 사용 하는 연결 문자열을 전달 하 여 연결 개체를 만듭니다.
    SqlConnection cn = new SqlConnection("server=myserver;uid=myuid;pwd=mypassword;database=northwind");
  18. SqlDataAdapter 개체에 전달 하는 SqlCommand 개체를 만듭니다. 임시 SQL 문과 새 Connection 개체를 SqlCommand 생성자에 전달 합니다. 전자는 새 SqlCommand 개체의 CommandText 속성을 설정합니다. 저장된 프로시저의 이름을 전달할 수도 있습니다.
    SqlCommand cmd = new SqlCommand("select * from [Alphabetical list of products]", cn);
  19. 새 SqlCommand 개체를 생성자에 전달 하는 SqlDataAdapter 개체의 인스턴스를 만듭니다.
    SqlDataAdapter da = new SqlDataAdapter(cmd);
  20. 이제 데이터베이스에 연결 하 고 데이터를 반환 하는 데 필요한 개체를 만듭니다. 형식화 된 데이터 집합에 대 한 코드는 다음과 같습니다. DsProducts 클래스의 인스턴스는 생성: dsProducts 스키마에 매핑됩니다 아닌 일반 DataSet 클래스 자체는 DataSet 클래스에서 상속 하는 클래스입니다.
    dsProducts tds = new dsProducts();
  21. 형식화 된 DataSet 개체를 전달 하는 SqlDataAdapter의 메서드를 호출 하 고 데이터 집합DataTable TableName 속성을 입력 한:
    da.Fill(tds, tds.Tables[0].TableName);
  22. 강력한 형식의 형식화 된 데이터 집합데이터 테이블열에 텍스트 상자 컨트롤의 Text 속성을 설정 하려면 다음 형식을 사용 합니다.
    dsProducts.DataTableName[RowIndex].ColumnName
    이 샘플 응용 프로그램에 대 한 RowIndex가 5로 하드 코드:
    TextBox1.Text = tds.Alphabetical_list_of_products[5].ProductName;TextBox2.Text = tds.Alphabetical_list_of_products[5].CategoryName; 

    페이지가 로드 될 때 Rows 컬렉션의 0부터 시작 이므로 텍스트 상자 컨트롤 DataGrid의 여섯 번째 행에 항목 제품 및 범주 이름을 표시 되도록 note입니다.
  23. 모든 결과 DataGrid에 표시 하려면 새 형식화 된 데이터 집합을 DataGrid의 DataSource 속성을 설정 하 고 DataBind()를 호출 합니다.
    DataGrid1.DataSource = tds;DataGrid1.DataBind();

전체 코드 (WebForm1.aspx)을 나열 합니다.

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="TDS.WebForm1" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Label id="Label1" runat="server" >Label</asp:Label>
<asp:DataGrid id="DataGrid1" runat="server" ></asp:DataGrid>
<asp:TextBox id="TextBox2" runat="server"></asp:TextBox>
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:Label id="Label2" runat="server" >Label</asp:Label>
</form>
</body>
</HTML>

전체 코드 목록 (WebForm1.aspx.cs)

using System.Data.SqlClient;
namespace TDS
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.TextBox TextBox2;
protected System.Web.UI.WebControls.DataGrid DataGrid1;

private void Page_Load(object sender, System.EventArgs e)
{
SqlConnection cn = new SqlConnection("server=localhost;uid=sa;pwd=abcd;database=northwind");
SqlCommand cmd = new SqlCommand("select * from [Alphabetical list of products]", cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
dsProducts tds = new dsProducts();

da.Fill(tds, tds.Tables[0].TableName);
TextBox1.Text = tds.Alphabetical_list_of_products[5].ProductName;
TextBox2.Text = tds.Alphabetical_list_of_products[5].CategoryName;

DataGrid1.DataSource = tds;
DataGrid1.DataBind();

}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.TextBox1.TextChanged += new System.EventHandler(this.TextBox1_TextChanged);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}


확인

웹 응용 프로그램을 실행 하려면 F5 키를 누릅니다. 브라우저는 "대양 특선 건과 (배)" 제품 텍스트 상자 및 "가공 식품" 범주 텍스트 상자에 표시합니다. 제품 정보로 채워진 표의 텍스트 상자 아래에 나타납니다.

문제 해결

  • 일반 데이터 집합 에서 메서드를 호출 하는 경우 테이블 이름 을 전달 하는 필요 하지 않습니다. 그러나 형식화 된 데이터 집합필요한 이름, 테이블 이름대신 인덱스를 사용 하면 DataSet테이블 컬렉션에 액세스 하는 경우입니다. 형식화 된 데이터 집합테이블 이름 을 전달 하지 않으면 런타임에 "0 위치에 행이 없습니다" 오류를 throw 합니다. 이렇게 형식화 된 데이터 집합 또한 직접 TableName 있지만 위로 할 수 있다는 것을 의미 위의 코드와 같이 액세스할 형식화 된 데이터 집합 클래스에서 참조 되는 것을 전달 해야 합니다.
  • 스키마를 생성 하기 위해 처음 사용 및 형식의 DataSet 클래스를 스키마 디자인 보기로 다시 끌어 데이터베이스 개체를 변경 하면 Visual Studio.NET에 의해 생성 되는 스키마를 선택 해야 하는 수동 변경 내용은 덮어씁니다. Microsoft SQL Server 수준에서 해야 하는 변경 및 결과 스키마 변경 보다 새 형식화 된 데이터 집합 을 생성 하려면 일반적으로 좋습니다.

참조

형식화 된 데이터 집합을 사용 하는 방법에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 참조 하십시오.


속성

문서 ID: 320714 - 마지막 검토: 2017. 2. 7. - 수정: 1

피드백