如何: 创建和使用 Visual C#.net 中使用类型化数据集

文章翻译 文章翻译
文章编号: 320714 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文介绍如何创建和使用类型化的 数据集 在小型 Web 应用程序中。键入 数据集,从 数据集 的类的继承创建一个 数据集数据表DataColumns,并生成很多好处附带的强类型使用的一类成员。

要求

建议的硬件、 软件、 网络基础结构、 技能和知识和服务包中必须具有完成这些步骤介绍了以下各项:
  • Microsoft SQL Server sql server 6.5 (或更高版本) 使用罗斯文数据库
所需的技能之前:
  • 常规熟悉 Microsoft SQL Server
  • Microsoft Visual Studio.net 的一般熟悉
  • Microsoft ADO.NET 的一般熟悉
  • Microsoft.net Web 控件的一般熟悉

类型化数据集

请按照下列步骤通过使用 Visual Studio.net 中创建一个小的 Web 应用程序。Web 应用程序使用类型化的 DataSet improvised SQL 查询的结果显示在罗斯文数据库中。
  1. 启动 Visual Studio.net。
  2. 创建名为 TDS Visual C#.net 中的新 Web 应用程序项目。
  3. 请确保在解决方案资源管理器将显示。如果没有显示解决方案资源管理器中,则请按 CTRL + ALT + L。
  4. 请确保 WebForm1.aspx 文件处于打开状态,在编辑器窗口中。如果不打开文件双击 WebForm1.aspx 在解决方案资源管理器中打开该文件。
  5. 在编辑器窗口下单击 设计 以切换到设计视图。
  6. 要打开工具箱中按下 CTRL + ALT + X。在工具箱中单击 Web 窗体。选择,然后将下列拖到页面的左上角: 两个行的每个文本框 (位置右侧的每个标签) 后跟一个标签。在这些,请以相同的方式添加一个 DataGrid
  7. 单击顶部的标签。请按 F4 以显示属性窗口。将 Text 属性 更改为 产品。单击其他标签,然后将其 Text 属性 更改为 分类
  8. 若要向项目中添加一个新的 数据集 按 CTRL + SHIFT + A,然后单击在模板列表中的 数据集。下列命名 数据集dsProducts.xsd。请注意该文件实际上是一个 XML 架构。单击 确定。现在,您可以看到在编辑器窗口中的浅黄色页。
  9. 若要进行类型化的 数据集,请按 CTRL + ALT + S 打开服务器资源管理器。
  10. 单击 服务器、 单击 computer name、 单击 SQLServers、 单击 server name,单击 罗斯文,然后单击 视图
  11. 选择 按汉语拼音顺序的产品列表,Northwind SQL Server 视图,然后拖动到淡黄色 DataSet 页的视图。视图由生成的结果集的可视化表示形式将出现在页面上。若要查看实际的 XML 架构文件,单击下的编辑器窗口的 XML 按钮。
  12. 现在基于 SQL Server 对象的架构存在。若要创建,并填充一个类型化的 数据集 首先您必须生成映射到架构的类。用鼠标右键单击设计视图,然后确保选中了 生成数据集 选项。如果未选中则将其选中。按 CTRL + S 以保存该架构并生成类。
  13. 单击访问新的类型化的 DataSet 类的 显示所有文件 在解决方案资源管理器中。
  14. 展开树 dsProducts.xsd 旁边。您将看到包含新的类映射到架构的 dsProducts.vb 文件。您还看到了用于跟踪对文件所做的更改的 dsProducts.xsx 文件。
  15. 若要写入代码以显示类型化的 DataSet 双击直接在 Web 窗体 (不在 Web 控件) 上。将出现 Web 窗体的代码隐藏和插入点位于 Page_Load 事件。
  16. 若要将驻留在 System.Data.SqlClient 命名空间中的类在代码隐藏的顶部添加以下 使用 语句:
    using System.Data.SqlClient;
    					
    : 您必须具有为此小的 Web 应用程序的其他的命名空间会自动在项目中引用时在 Visual Studio.net 中创建的 Web 应用程序。

  17. Page_Load 的事件过程来将连接字符串传递到 SqlConnection 类的默认构造函数创建一个连接对象:
    SqlConnection cn = new SqlConnection("server=myserver;uid=myuid;pwd=mypassword;database=northwind");
    					
  18. 创建一个 SqlCommand 对象,然后被传递给 SqlDataAdapter 对象的对象。将 improvised 的 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 类本身继承的类
    dsProducts tds = new dsProducts();
    					
  21. 调用 SqlDataAdapter,传递类型化 DataSet 对象中的 填充 方法以及该 数据集 键入 数据表 TableName 属性:
    da.Fill(tds, tds.Tables[0].TableName);
    					
  22. 要设置为强类型的列在类型化的 数据集数据表 中的文本的 文本 属性框控件,使用以下格式:
    dsProducts.DataTableName[RowIndex].ColumnName
    						
    对于此示例应用程序在 RowIndex 是硬编码到 5:
    TextBox1.Text = tds.Alphabetical_list_of_products[5].ProductName;
    TextBox2.Text = tds.Alphabetical_list_of_products[5].CategoryName; 
    						
    由于页面加载时, 集合是从零开始,请注意文本框控件在 数据网格 的第六行中显示项的产品和类别名称。
  23. 若要显示的所有结果在 DataGrid 中,将在数据网格的 数据源 属性设置为新类型化 数据集,和调用 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 键以运行 Web 应用程序。浏览器中将 产品 文本框和农产品 类别 文本框中显示"柳王俊元的随机 Dried"。文本框下显示产品信息填写的是一个 DataGrid。

故障排除

  • 泛型 数据集 并不要求您在调用 填充 方法时传递一个 TableName。键入 数据集,但是,需要这样,即使索引的 TableName 而不是通过访问该 数据集 集合。未能传递类型化的 数据集TableName 在运行时将引发一个"位置 0 处没有任何行"的错误。此要求的类型化 数据集 也意味着您不能构成 TableName 您自己,但您必须通过引用作为在前面的代码访问在类型化 数据集 类中的一个。
  • 如果您更改数据库对象您最初用来生成架构和键入 DataSet 类并再次将其拖动到架构设计视图,您对生成的 Visual Studio.net 架构的任何手动更改将被覆盖。它是以使您不必在 Microsoft SQL Server 级别的更改,并生成比若要更改结果的架构的一个新类型化的 数据集 通常更可取。

参考

有关如何使用类型化 数据集 的详细信息请参阅下面的 Microsoft 网站:
http://msdn2.microsoft.com/en-us/library/esbykkzb(vs.71).aspx


属性

文章编号: 320714 - 最后修改: 2007年5月17日 - 修订: 2.3
这篇文章中的信息适用于:
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 标准版
  • Microsoft Visual C# .NET 2003 标准版
关键字:?
kbmt kbhowtomaster KB320714 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 320714
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com