谁可相欹 发表于 2015-1-16 22:32:36

ASP.NET网页设计在ADO.NET数据会合扫瞄多个相干表

因为各系统的API不同,代码调用API编写程序就会遇到很多不兼容的地方,比如Java改写后的Serv-U就不能在手机上执行,手机的游戏也不能直接在微机上执行。ado|数据  择要:ADO.NET中的数据集是一种在内存中暗示数据的办法,它能够包括多个相干的数据表。本文先容了在数据会合扫瞄这些相干数据表的办法。您将在VisualBasic?.net或VisualC#?.NET中创立一个Windows?使用程序,基于选定的纪录前往相干纪录,并利用表达式列为相干纪录天生算计信息。本文包括一些指向英文站点的链接。
  简介
  因为数据集能够包括几个相干的表,因而懂得怎样在父纪录和子纪录之间举行扫瞄是一项基础义务,而这并不是不言而喻,出格是当您试图会见相干条理布局中的深层表中的数据时,更是云云。您还将进修怎样扫瞄包括具有多对多干系的表的数据集,个中每一个表都经由过程第三方表(两头表)相互相干联。
  以下是本文所包括义务的概述:
  1、创立Windows使用程序项目。
  2、显现用作初始选定内容的数据列表。
  3、前往与选定纪录相干的纪录。
  4、扫瞄多个表和多个相干布局,并在运转时间接会见数据会合的数据。
  别的,本文还先容一些相干的义务:
  1、为数据表增加基于相干数据的表达式列。
  2、天生相干数据的算计信息。
  条件前提
  要充实了解本文,您应当具有:
  ●基础的干系数据库观点的常识。
  ●与罗文雅示例数据库的无效毗连,以便您可以创立和运转使用程序。
  ●大致上熟习ADO.NET数据集。
  主要的数据工具
  要利用数据会合的相干纪录,您应基础懂得.NET框架System.Data定名空间中的几个工具和它们怎样互相感化。这些工具协同事情以供应数据会合的导航功效。
  以下工具用于表达数据会合的干系:
  ●DataSet-在内存中暗示数据,能够包括多个可与DataRelation工具相干的DataTable工具。
  ●DataTable-暗示一个完全的数据表。数据表的架构是由组成该表的DataColumnCollection界说的。当两个数据表相干时,DataRelation工具利用每一个表中的DataColumn来联系关系数据。
  ●DataRelation-毗连多个表,以便扫瞄相干表中的纪录。会见相干纪录时,DataRelation工具被传送给GetChildRows或GetParentRow办法。DataRelation工具断定所要查询的相干表,以便前往与GetChildRows或GetParentRow办法挪用相干联的相干数据。
  ●DataRow-暗示数据的一个独自的纪录。用于前往相干数据的GetChildRows办法和GetParentRow办法是DataRow工具的成员。
  ●DataColumn-暗示一个独自的字段,分离在一同时将界说DataTable的架构。当两个数据表相干时,DataRelation工具利用每一个表中的数据列来联系关系数据。
  创立使用程序
  本节将创建这一练习训练的出发点。随后的步骤将创立数据毗连、数据适配器和包括相干表的数据集,和几个选择和显现数据的控件。
  创立新的Windows使用程序
  1、从File(文件)菜单中,指向New(新建),并选择Project(项目)。将显现NewProject(新建项目)对话框。
  2、在ProjectTypes(项目范例)窗格中,依据您必要的编程言语,选择VisualBasicProjects(VisualBasic项目)或VisualC#Projects(VisualC#项目)。
  3、在Templates(模板)窗格中,选择WindowsApplication(Windows使用程序),并将其定名为DataRelationExample,然后单击OK(断定)。
  DataRelationExample项目将增加到SolutionExplorer(办理计划资本办理器)中。
  毗连到数据库
  此毗连同意您与VisualStudio?集成开辟情况(IDE)中的数据源举行通信。
  毗连到ServerExplorer(服务器资本办理器)中的罗文雅示例数据库
  1、在ServerExplorer(服务器资本办理器)中,创建毗连到罗文雅示例数据库的数据毗连。
  2、在ServerExplorer(服务器资本办理器)中睁开罗文雅数据毗连,直到能够看到一切的表。
  创立数据适配器和毗连
  此步骤创立用于在使用程序和数据源之间毗连和互换数据的毗连和数据适配器。
  创立数据适配器和毗连
  1、将“客户”表从ServerExplorer(服务器资本办理器)中拖到窗体上。组件栏中将显现毗连和数据适配器。
  2、选择Connection(毗连)并将Name属性设置为dcNorthwind.
  3、选择数据适配器并将Name属性设置为daCustomers.
  4、将“定单”表从ServerExplorer(服务器资本办理器)中拖到窗体上。组件栏中将显现第二个数据适配器。
  5、选择新的数据适配器并将Name属性设置为daOrders.
  天生数据集
  利用方才增加到窗体上的数据适配器天生包括客户表和定单表的数据集。
  天生将包括相干数据表的数据集
  1、从Data(数据)菜单中,选择GenerateDataset(天生数据集)。将显现GenerateDataset(天生数据集)对话框。
  提醒:将光标移到窗体上便可利用Data(数据)菜单。
  2、单击New(新建)并将数据集定名为dsNorthwind.
  3、选择客户表和定单表。
  4、选择Addthisdatasettothedesigner(将此数据集增加到计划器)复选框,然后单击OK(断定)。
  SolutionExplorer(办理计划资本办理器)的项目中将增加一个名为dsNorthwind.xsd的文件,而且组件栏中将显现该数据集的一个实例。
  创立干系
  天生数据集其实不能主动创立数据会合各表之间的干系。干系能够经由过程编程创立,也能够利用XMLDesigner(XML计划器)直不雅地创立。本文利用XMLDesigner(XML计划器)。
  创立客户表和定单表之间的干系
  1、在SolutionExplorer(办理计划资本办理器)中,双击dsNorthwind.xsd文件。文件将在XMLDesigner(XML计划器)中翻开。
  2、从工具栏的XMLSchema(XML架构)选项卡中,将Relation(干系)拖到定单表上。
  3、在EditRelation(编纂干系)对话框中,设置以上司性:
元素设置
NameCustomersOrders
ParentCustomers
ChildOrders
KeyFieldsCustomerID
ForeignKeyFieldsCustomerID
  4、单击OK(断定)以创立干系并封闭对话框。
  5、从File(文件)菜单中,选择SaveAll(全体保留)以保留该项目。
  显现数据
  此使用程序利用组合框、列表框和RTF文本框来选择和显现数据。
  增加选择和显现数据的控件
  1、在SolutionExplorer(办理计划资本办理器)中,右键单击Form1(。cs或.VB,取决于使用程序的言语),然后从快速菜单当选择ViewDesigner(视图计划器)。
  2、在窗体的左半部,增加一个ListBox控件,并将其Name属性设置为lbOrders.
  3、在窗体的右半部,增加一个RichTextBox控件,并将其Name属性设置为rtbDetails.
  4、在列表框的上方,增加一个ComboBox控件,并将其Name属性设置为cbCustomers.
  5、保留项目。



  :倡议的窗体控件结构
  如今,能够入手下手向使用程序增加功效了。
  设置显现公司称号的组合框
●选择组合框(cbCustomers)并设置以上司性:
属性设置
DataSourceDsNorthwind1
DisplayMemberCustomers.CompanyName
ValueMemberCustomers.CustomerID
  用数据添补表
  要用数据添补表,必需为使用程序增加代码。
  在数据集(dsNorthwind1)中的客户表和定单表中添补数据
  1、双击窗体上的一块空缺地区,为Form1_Load事务创立事务处置程序。
  2、增加以下代码:
VisualBasic
PrivateSubForm1_Load(ByValsenderAsSystem.Object,_
ByValeAsSystem.EventArgs)HandlesMyBase.Load
封闭数据会合的束缚。
DsNorthwind1.EnforceConstraints=False
用数据添补表。
daOrders.Fill(DsNorthwind1)
daCustomers.Fill(DsNorthwind1)
从头开启束缚。
DsNorthwind1.EnforceConstraints=True
EndSub
//C#
privatevoidForm1_Load(objectsender,System.EventArgse)
{
//封闭数据会合的束缚。
dsNorthwind1.EnforceConstraints=false;
//用数据添补表。
daOrders.Fill(dsNorthwind1);
daCustomers.Fill(dsNorthwind1);
//从头开启束缚。
dsNorthwind1.EnforceConstraints=true;
}
  3、保留项目。
  4、按F5键运转该使用程序。如今组合框中包括一个公司称号列表。
  5、封闭窗体。
  在两个表中扫瞄相干纪录
  这里扼要先容一下怎样在数据会合组成一对多干系的两个表之间会见数据。在选择一个数据行以后,能够经由过程挪用GetChildRows或GetParentRow办法并向该数据行传送得当的数据干系来前往其相干纪录。
  注重:GetChildRows办法将以DataRow工具数组的情势前往数据,而GetParentRow办法只前往一个单个的数据行。
  要演示这一功效,必要给使用程序增加一些代码,以前往组合框当选定客户的一切定单(子行)。变动组合框中的选定客户会激发ComboBox.SelectedIndExchanged事务,列表框中将添补该选定客户的每一个定单的定单ID.
  您能够依据组合框当选定的客户,挪用GetChildRows办法。定单表中的一切相干纪录都将分派给名为draOrders的数据行数组。
  注重:下一节将增加在列表框中显现相干定单列表的功效。为确认数组中的确包括相干的纪录,数组的长度(即选定客户的定单总数)将显现为窗体的题目。
  创立猎取选定客户的定单的事务处置程序
  1、在SolutionExplorer(办理计划资本办理器)中,右键单击Form1并从快速菜单当选择ViewDesigner(视图计划器)。
  2、双击组合框为SelectedIndexChanged事务创立事务处置程序。
  3、增加以下代码:
VisualBasic
PrivateSubcbCustomers_SelectedIndexChanged_
(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_
HandlescbCustomers.SelectedIndexChanged
声明一个用来保留选定客户的客户ID的字符串。
DimSelectedCustomerIDAsString
SelectedCustomerID=cbCustomers.SelectedValue.ToString()
声明一个用来保留选定客户的纪录的数据行。
DimdrSelectedCustomerAsDataRow
drSelectedCustomer=_
DsNorthwind1.Customers.FindByCustomerID_
(SelectedCustomerID)
声明一个用来保留相干纪录的数据行数组。
DimdraOrdersAsDataRow()
draOrders=drSelectedCustomer.GetChildRows("CustomersOrders")
在窗体题目中显现数组的长度(定单数)
和客户ID。
Me.Text=draOrders.Length.ToString()&"定单一切者"&_
SelectedCustomerID
EndSub
//C#
privatevoidcbCustomers_SelectedIndexChanged
(objectsender,System.EventArgse)
{
//声明一个用来保留选定客户的客户ID的字符串。
StringSelectedCustomerID;
SelectedCustomerID=cbCustomers.SelectedValue.ToString();
//声明一个用来保留选定客户的纪录的数据行。
DataRowdrSelectedCustomer;
drSelectedCustomer=
dsNorthwind1.Customers.FindByCustomerID(SelectedCustomerID);
//声明一个用来保留相干纪录的数据行数组。
DataRow[]draOrders;
draOrders=drSelectedCustomer.GetChildRows("CustomersOrders");
//在窗体题目中显现数组的长度(定单数)
//和客户ID。
this.Text=draOrders.Length.ToString()+
"定单一切者"+SelectedCustomerID;
}
  4、保留项目。
  5、运转使用程序。
  选择另外一个客户,并反省窗体题目。将显现选定客户的定单总数及其客户ID.
  6、封闭窗体。
  显现相干纪录
  如今您已有了选定客户的相干纪录(存储在数据行数组中),您能够显现它们以便与用户举行交互。使用程序将一一会见GetChildRows办法前往的数据行数组中的数据,并将每一个相干纪录的“定单ID”作为独自的项增加到列表框中。
  注重:固然此示例将一一会见相干数据行数组中的数据,但列表框大概已利用属性窗口,经由过程DataSource属性、DataMember属性和ValueMember属性被绑定到相干的纪录。
  在列表框中显现相干纪录
  1、在SolutionExplorer(办理计划资本办理器)中,右键单击Form1并从快速菜单当选择ViewCode(检察代码)。
  2、在后面步骤中创立的组合框的SelectedIndExchanged事务处置程序中,将以下代码增加各处理程序中已有代码之下:
VisualBasic
当变动选定客户时,扫除定单列表。
lbOrders.Items.Clear()
rtbDetails.Text=""
将每一个相干定单的定单ID增加到列表框中。
DimdrOrderAsDataRow
ForEachdrOrderIndraOrders
lbOrders.Items.Add(drOrder("OrderID"))
Next
//C#
//当变动选定客户时,扫除定单列表。
lbOrders.Items.Clear();
rtbDetails.Text="";
//将每一个相干定单的定单ID增加到列表框中。
foreach(DataRowdrOrderindraOrders)
{
lbOrders.Items.Add(drOrder["OrderID"]);
}
  3、保留项目。
  4、运转使用程序。
  列表框中将显现定单列表。在组合框当选择另外一个客户,定单列表将被更新。
  5、封闭窗体。
  在三个或更多表中扫瞄相干纪录
  扫瞄三个或更多表与处置两个表一样复杂。要懂得怎样处置两个以上的表,请将定单明细表和产物表增加到dsNorthwind数据会合。在列表框当选定一个定单后,该定单的具体信息即显现在RTF文本框中。
  为了满意束缚划定规矩,您必要删除现有的数据干系,未来再从头创立。
  临时删除dsNorthwind数据会合的DataRelation
  1、在SolutionExplorer(办理计划资本办理器)中,双击dsNorthwind.xsd以在XMLDesigner(XML计划器)中翻开它。
  2、选择现有的CustomersOrders干系并将其删除。
  3、保留项目。
  如今您必要将别的两个表增加到现无数据会合,并创立新的DataRelation工具以将一切表连在一同。
  将定单明细表和产物表增加到dsNorthwind数据会合
  1、在SolutionExplorer(办理计划资本办理器)中,右键单击Form1并从快速菜单当选择ViewDesigner(视图计划器)。
  2、将“定单明细”表从ServerExplorer(服务器资本办理器)中拖到窗体上。组件栏中将显现一个新的数据适配器。
  3、选择该新的数据适配器并将其Name属性设置为daOrderDetails.
  4、将“产物”表从ServerExplorer(服务器资本办理器)中拖到窗体上。组件栏中将显现一个新的数据适配器。
  5、选择该新的数据适配器并将其Name属性设置为daProducts.
  新表只是被增加到了窗体上,因而每次增加分外的表时,都必需从头天生数据集。
  从头天生dsNorthwind数据集
  1、从Data(数据)菜单中,选择GenerateDataset(天生数据集)。
  提醒:将光标移到窗体上便可利用Data(数据)菜单。
  2、单击Existing(现有),然后选择dsNorthwind数据集。
  3、选择一切四个表(客户表、定单表、定单明细表和产物表)。
  4、扫除Addthisdatasettothedesigner(将此数据集增加到计划器)复选框,然后单击OK(断定)。将天生带有附加表的数据集。
  注重:假如呈现一个对话框,个中申明“Thefilehasbeenmodifiedoutsideofthesourceeditor.Doyouwanttoreloadit?”(文件已在源编纂器以外被修正。是不是要从头加载?),请单击Yes(是)。
  请记着,天生数据集其实不能主动创立数据会合各表之间的干系。
  创立干系
  1、在SolutionExplorer(办理计划资本办理器)中,双击dsNorthwind.xsd文件。文件将在XMLDesigner(XML计划器)中翻开。
  2、从工具栏的XMLSchema(XML架构)选项卡中,将Relation(干系)拖到定单表上。
  3、在EditRelation(编纂干系)对话框中,设置以上司性:
元素设置
NameCustomersOrders
ParentCustomers
ChildOrders
KeyFieldsCustomerID
ForeignKeyFieldsCustomerID
  4、单击OK(断定)以创立干系并封闭对话框。
  5、从工具栏的XMLSchema(XML架构)选项卡中,将Relation(干系)拖到定单明细表上。
  6、在EditRelation(编纂干系)对话框中,设置以上司性:
元素设置
NameOrdersOrderDetails
ParentOrders
ChildOrderDetails
KeyFieldsOrderID
ForeignKeyFieldsOrderID
  7、单击OK(断定)以创立干系并封闭对话框。
  8、从工具栏的XMLSchema(XML架构)选项卡中,将Relation(干系)拖到定单明细表上。
  9、在EditRelation(编纂干系)对话框中,设置以上司性:
元素设置
NameProductsOrderDetails
ParentProducts
ChildOrderDetails
KeyFieldsProductID
ForeignKeyFieldsProductID
  10、单击OK(断定)以创立干系并封闭对话框。
  11、保留项目。
VisualBasic
daOrderDetails.Fill(dsNorthwind1)
daProducts.Fill(dsNorthwind1)
//C#
daOrderDetails.Fill(dsNorthwind1);
daProducts.Fill(dsNorthwind1);
  用数据添补RTF文本框
  如今您要为项目增加代码,以便在列表框当选定某个定单时,能够在RTF文本框中显现一切定单明细。
  以下代码将基于列表框中的选定定单挪用GetChildRows办法。定单明细表中的一切相干纪录都将分派给名为draOrderDetails的数据行数组。每一个数据行的内容将显现在RTF文本框中。
  注重:请注重嵌套的ForEach轮回是怎样起首拔取一个数据行,然后在该数据行的一切列中轮回以会见全部相干纪录的。
  设置RTF文本框以显现一切定单明细
  1、在SolutionExplorer(办理计划资本办理器)中,右键单击Form1并从快速菜单当选择ViewDesigner(视图计划器)。
  2、双击列表框为列表框lbOrders的SelectedIndExchanged事务创立事务处置程序。
  3、增加以下代码:
VisualBasic
PrivateSublbOrders_SelectedIndexChanged_
(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_
HandleslbOrders.SelectedIndexChanged
选择新定单时,扫除RTF文本框。
rtbDetails.Clear()
声明一个用来保留选定的定单ID的整数。
DimSelectedOrderIDAsInteger
将选定的项目设置为整数。
SelectedOrderID=CType(lbOrders.SelectedItem,Integer)
声明一个用来保留选定定单的纪录的数据行。
DimdrSelectedOrderAsDataRow
drSelectedOrder=_
DsNorthwind1.Orders.FindByOrderID(SelectedOrderID)
声明一个用来保留相干纪录的数据行数组。
DimdraOrderDetails()AsDataRow
draOrderDetails=_
drSelectedOrder.GetChildRows("OrdersOrderDetails")
DimdetailsAsString=""
DimdrDetailsAsDataRow
DimdcDetailsAsDataColumn
ForEachdrDetailsIndraOrderDetails
ForEachdcDetailsIndrDetails.Table.Columns
details&=dcDetails.ColumnName&":"
details&=drDetails(dcDetails).ToString()
details&=ControlChars.CrLf
Next
details&=ControlChars.CrLf
Next
rtbDetails.Text=details
EndSub
//C#
privatevoidlbOrders_SelectedIndexChanged
(objectsender,System.EventArgse)
{
//选择新定单时,扫除RTF文本框。
rtbDetails.Clear();
//声明一个用来保留选定的定单ID的整数。
intSelectedOrderID;
//将选定的项目设置为整数。
SelectedOrderID=(int)lbOrders.SelectedItem;
//声明一个用来保留选定定单的纪录的数据行。
DataRowdrSelectedOrder;
drSelectedOrder=
dsNorthwind1.Orders.FindByOrderID(SelectedOrderID);
//声明一个用来保留相干纪录的数据行数组。
DataRow[]draOrderDetails;
draOrderDetails=
drSelectedOrder.GetChildRows("OrdersOrderDetails");
stringdetails="";
foreach(DataRowdrDetailsindraOrderDetails)
{
foreach(DataColumndcDetailsindrDetails.Table.Columns)
{
details+=dcDetails.ColumnName+":";
details+=drDetails.ToString()+"
";
}
details+="
";
}
rtbDetails.Text=details;
}
  4、保留项目。
  5、运转使用程序。
  6、在列表框当选择一个定单,其定单明细将显现在RTF文本框中。
  7、在列表框当选择另外一个定单。RTF文本框中的定单明细将被更新。
  扫瞄多对多干系
  组成多对多干系的表一般经由过程包管数据完全性的第三方表举行毗连。在罗文雅数据库中,定单表和产物表就是如许相干的。由于有些定单大概包括良多产物,而有些产物又在良多定单中发卖。这两个表是经由过程定单明细表毗连的,定单明细表使用这两个表中的列创建本人特定的列,并使这些数据相干。扫瞄组成多对多干系的三个表与处置一对多干系的表并没有太年夜区分。
  要扫瞄多对多干系,您能够基于定单明细表中的单个纪录来会见产物,这将前往产物称号并显现在定单明细中。
  您可使用GetParentRow办法从产物表中会见产物称号。挪用GetParentRow办法将前往单个数据行,而挪用GetChildRows办法将前往数据行数组(如上例所示)。
  从定单明细纪录中猎取产物称号
  1、在SolutionExplorer(办理计划资本办理器)中,右键单击Form1并从快速菜单当选择ViewCode(检察代码)。
  2、在列表框(lbOrders)的SelectedIndexChanged事务处置程序中,将以下代码增加到ForEach行之间:
VisualBasic
details&="产物称号:"&_
CType(drDetails.GetParentRow("ProductsOrderDetails")_
("ProductName"),String)&ControlChars.CrLf
//C#
details+="产物称号:"+
drDetails.GetParentRow("ProductsOrderDetails")["ProductName"]
+"
";
  3、保留项目。
  4、运转使用程序。
  5、在列表框当选择一个定单,
  RTF文本框中将显现产物称号和具体信息。如今窗体中显现来自一切四个表的相干数据。




  :显现产物称号和定单明细的窗体
  6、在列表框当选择另外一个定单。RTF文本框中的定单明细将被更新。
  7、封闭窗体。
  表达式列
  除包括静态数据外,还能够基于表达式的了局为DataColumn分派值。表达式是一个分派给DataColumn.Expression属性的字符串。
  当表达式与相干数据一同利用时,数据列能够包括:
  ●相干数据列的盘算所得值。
  ●相干数据列的算计信息。
  ●相干数据的逻辑对照了局。
  为申明处置相干数据时的值表达式列,我们将针对每种利用情形先容一个示例,并增加到DataRelationExample使用程序中。
  增加包括盘算值的表达式列
  盘算的列包括数学运算了局。能够从现有的列中取值举行盘算。定单明细表中将增加一个名为Total的新列,它将包括由表达式UnitPrice*Quantity前往的值(定单的总计美圆值)。
  增加表达式列
  1、在SolutionExplorer(办理计划资本办理器)中,右键单击Form1并从快速菜单当选择ViewCode(检察代码)。
  2、将以下代码增加到Form1_Load事务处置程序中已有代码之上:
VisualBasic
在定单明细表中创立名为Total的表达式列。
DimdcTotalasDataColumn=newDataColumn("Total")
dcTotal.DataType=System.Type.GetType("System.Decimal")
dcTotal.Expression="UnitPrice*Quantity"
DsNorthwind1.Order_Details.Columns.Add(dcTotal)
//C#
//在定单明细表中创立名为Total的表达式列。
DataColumndcTotal=newDataColumn("Total");
dcTotal.DataType=System.Type.GetType("System.Decimal");
dcTotal.Expression="UnitPrice*Quantity";
dsNorthwind1.Order_Details.Columns.Add(dcTotal);
  3、运转使用程序。
  4、在列表框当选择一个定单,
  反省RTF文本框中的定单明细,并注重每一个纪录都有一个新的Total列,显现UnitPrice和Quantity字段的乘积。
  5、封闭窗体。
  将以下代码增加到Form1_Load事务处置程序中已有代码之上:
VisualBasic
在定单明细表中创立名为Total的表达式列。
DimdcTotalasDataColumn=newDataColumn("Total")
dcTotal.DataType=System.Type.GetType("System.Decimal")
dcTotal.Expression="UnitPrice*Quantity"
DsNorthwind1.Order_Details.Columns.Add(dcTotal)
//C#
//在定单明细表中创立名为Total的表达式列。
DataColumndcTotal=newDataColumn("Total");
dcTotal.DataType=System.Type.GetType("System.Decimal");
dcTotal.Expression="UnitPrice*Quantity";
dsNorthwind1.Order_Details.Columns.Add(dcTotal);
  1、在SolutionExplorer(办理计划资本办理器)中,右键单击Form1并从快速菜单当选择ViewCode(检察代码)。
  2、在Form1_Load事务处置程序中,将以下代码增加到在定单明细表中创立Total列的代码的下方:
VisualBasic
在定单表中创立名为OrderTotal的表达式列。
DimdcOrderTotalasDataColumn=newDataColumn("OrderTotal")
dcOrderTotal.DataType=System.Type.GetType("System.Decimal")
dcOrderTotal.Expression="Sum(Child.Total)"
DsNorthwind1.Orders.Columns.Add(dcOrderTotal)
//C#
//在定单表中创立名为OrderTotal的表达式列。
DataColumndcTotal2=newDataColumn("OrderTotal");
dcTotal2.DataType=System.Type.GetType("System.Decimal");
dcTotal2.Expression="Sum(Child.Total)";
dsNorthwind1.Orders.Columns.Add(dcTotal2);
  将算计信息显现在一切定单明细的上方
  1、在lbOrders_SelectedIndExchanged事务处置程序中,将以下代码增加到DimdetailsAsString=""或stringdetails=""行之下:
VisualBasic
details="定单总计:"&String.Format("{0:c}",_
DsNorthwind1.Orders.FindByOrderID(CType(lbOrders.SelectedItem,_
Integer))("OrderTotal"))&ControlChars.CrLf
//C#
details="定单总计:"+
String.Format("{0:c}",dsNorthwind1.Orders.FindByOrderID
((int)lbOrders.SelectedItem)["OrderTotal"])+"
";
  2、运转使用程序。
  3、在列表框当选择一个定单,
  请注重,选定定单的一切定单明细的总计金额将显现在RTF文本框中的第一行。
  4、在列表框当选择另外一个定单,将更新显现以反应新选择的定单。
  5、封闭窗体。
  增加包括逻辑求值的表达式列
  Expression属性能够基于其他列中的盘算值来添补某个数据列。比方,定单表中的OrderSize列能够包括值“Big”(假如定单总额年夜于1000)大概“Small”(假如定单总额小于1000)。
  为演示这类表达式,必要在DataRelationExample使用程序中增加代码以实行以下操纵:
  1、在定单表中增加名为OrderSize的数据列。
  2、依据相干定单明细的值来添补OrderSize列。
  3、在RTF文本框的顶部同时显现OrderSize列的值和OrderTotal的值。
  增加创立OrderSize列的代码
  1、在SolutionExplorer(办理计划资本办理器)中,右键单击Form1并从快速菜单当选择ViewCode(检察代码)。
  2、在Form1_Load事务处置程序中,将以下代码增加到在定单表中创立OrderTotal列的代码的下方:
VisualBasic
在定单表中创立名为OrderSize的表达式列。
DimdcOrderSizeasDataColumn=newDataColumn("OrderSize")
dcOrderSize.DataType=System.Type.GetType("System.String")
dcOrderSize.Expression="IIF(Sum(Child.Total)<1000,Small,Big)"
DsNorthwind1.Orders.Columns.Add(dcOrderSize)
//C#
//在定单表中创立名为OrderSize的表达式列。
DataColumndcOrderSize=newDataColumn("OrderSize");
dcOrderSize.DataType=System.Type.GetType("System.String");
dcOrderSize.Expression="IIF(Sum(Child.Total)<1000,Small,Big)";
dsNorthwind1.Orders.Columns.Add(dcOrderSize);
显现OrderSize的值
1、在lbOrders_SelectedIndexChanged事务处置程序中,将以下代码增加到第一个ForEach行的上方:
VisualBasic
details&="("&CType(DsNorthwind1.Orders.FindByOrderID_
(CType(lbOrders.SelectedItem,Integer))("OrderSize"),String)&")"_
&ControlChars.CrLf
//C#
details+="("+dsNorthwind1.Orders.FindByOrderID
((int)lbOrders.SelectedItem)["OrderSize"]+")
";
2、运转使用程序。
3、在列表框当选择一个定单。
4、反省RTF文本框中的第一行。选定定单的OrderSize将显现在OrderTotal的右边。
5、在列表框当选择另外一个定单,将更新显现以反应新选择的定单。
6、从Debug(调试)菜单中,选择StopDebugging(中断调试)。
有关相干表的其他信息
这里有需要说起一些其他信息以丰厚本文的内容。
添补相干数据表的按次十分主要
相干数据表的添补按次对数据的输入有很年夜影响,因而必需在计划使用程序时予以思索。比方,请注重最初一个添补的客户表的情形。当添补客户表时,组合框将添补客户称号值。添补组合框时,会激发SelectedIndexChanged事务。这将实行事务处置程序中的代码。因为还没有添补定单表,GetChildRows办法将前往零(0)个纪录,窗体的题目将显现毛病信息。试一试:变动代码以起首添补客户表,并运转使用程序。窗体的题目显现ALFKI的零(0)个定单,这是不准确的。
前往相干纪录的特定版本
经由过程将所需的DataRowVersion作为第二个(可选的)参数传送给GetChildRows或GetParentRow办法,能够前往数据行的特定版本。以该使用程序为例,假如只想检察特定客户的原始定单,能够将组合框的SelectedIndexChanged事务中的代码变动为相似以下的代码。因为此使用程序中的数据并未变动,以下代码不会发生分明的效果,这里只是作为一个申明。
VisualBasic
只用选定客户的原始子行
添补数组。
DimdraOrdersAsDataRow()=DsNorthwind1.Customers.FindByCustomerID_
(cbCustomers.SelectedValue.ToString()).GetChildRows_
("CustomersOrders",DataRowVersion.Original)
//C#
//只用选定客户的原始子行
//添补数组。
DataRowdraOrders=dsNorthwind1.Customers.FindByCustomerID
(cbCustomers.SelectedValue.ToString()).GetChildRows
("CustomerOrders",DataRowVersion.Original);
总结
要会见特定命据行的相干纪录,能够挪用该行的GetChildRows或GetParentRow办法,以传送毗连该数据行及其相干纪录的数据干系。然后,即可以经由过程反省由该办法挪用前往的数据行(或数据行数组)来会见相干的纪录。
经由过程为DataColumn.Expression属性分派一个无效的表达式字符串并将数据列增加到响应的DataTable.Columns汇合中,能够对相干纪录中的值举行盘算,算计和逻辑求值。
什么叫数据库怎么样?什么意思?你想单学数据库。(其实变成是我问的)

仓酷云 发表于 2015-1-19 16:22:40

是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。

活着的死人 发表于 2015-1-24 19:36:49

虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。

透明 发表于 2015-2-2 12:44:58

使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

因胸联盟 发表于 2015-2-7 20:10:26

虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。

愤怒的大鸟 发表于 2015-2-23 09:39:21

大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。

小妖女 发表于 2015-3-7 06:55:22

那么,ASP.Net有哪些改进呢?

第二个灵魂 发表于 2015-3-14 14:32:47

ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。

不帅 发表于 2015-3-21 10:00:28

Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
页: [1]
查看完整版本: ASP.NET网页设计在ADO.NET数据会合扫瞄多个相干表