Dim objConn as ADOConnection= New ADOConnection(strConn) obj Conn. Open(·打开数据链路 创建SQL字符串 Dim strSQL as String="SELECT* FROM authors 创建对象 ADODataset Command和 Dataset Dim objDSCommand as ADODataset Command Dim obj Dataset as Dataset= New Dataset obj DSCommand=New ADODataset Command(strSQL, obj Conn) 填充数据到 Dataset 并将数据集合命名为" Author Information objDSCommand. Fill DataSet(obj Dataset, "Author Information") obj Conn. Close'关闭数据链路 obj Conr= Nothing清除对象 Authors DataSource obj Dataset. Tables("Author Information").Default View Authors. DataBindo End sub Sub SQLBindData(str Conn) 设置连接串 创建对象 ADOConnection Dim obj Conn as SQLConnection= New SQLConnection(strConn) obj Conn. Open(·打开数据链路 创建SQL字符串 Dim strSQL as String="SELECT* FROM authors 创建对象 SQLDataset Command和 Dataset Dim objDSCommand as SQLDatasetCommand Dim objDataset as Dataset= New Dataset objDSCommand= New SQLDataset Command(strSQL, obj Conn) 填充数据到 Dataset 并将数据集合命名为" Author Information" obj DSCommand Fill DataSet(obj Dataset, "Author Information")
Dim objConn as ADOConnection = New ADOConnection(strConn) objConn.Open() '打开数据链路 '创建 SQL 字符串 Dim strSQL as String = "SELECT * FROM authors" '创建对象 ADODatasetCommand 和 Dataset Dim objDSCommand as ADODatasetCommand Dim objDataset as Dataset = New Dataset objDSCommand = New ADODatasetCommand(strSQL, objConn) '填充数据到 Dataset '并将数据集合命名为 "Author Information" objDSCommand.FillDataSet(objDataset, "Author Information") objConn.Close() '关闭数据链路 objConn = Nothing '清除对象 Authors.DataSource = _ objDataset.Tables("Author Information").DefaultView Authors.DataBind() End Sub Sub SQLBindData(strConn) '设置连接串... '创建对象 ADOConnection Dim objConn as SQLConnection = New SQLConnection(strConn) objConn.Open() '打开数据链路 '创建 SQL 字符串 Dim strSQL as String = "SELECT * FROM authors" '创建对象 SQLDatasetCommand 和 Dataset Dim objDSCommand as SQLDatasetCommand Dim objDataset as Dataset = New Dataset objDSCommand = New SQLDatasetCommand(strSQL, objConn) '填充数据到 Dataset '并将数据集合命名为 "Author Information" objDSCommand.FillDataSet(objDataset, "Author Information")
obj Conr. Close'关闭数据链路 obj Conn= Nothing清除对象 Authors Data Source obj Dataset. Tables("Author Information"). DefaultView Authors. DataBindo End Sub script> <HTML> <BODY> <H2>测试设置</H2> <Form Action="122303 aspx"Method="Post"RunAt="Server"> <asp: RadioButtonList ID="choices"RunAt="Server"> asp: Listltem selected Text=ADO. NET Managed Provider +ODBC" Value=1/<br> <asp: Listitem Text="ADO. NET Managed Provider+OLEDB" Value=2/><br> asp: Listitem Text="SQL Managed Provider"Value=3/> <asp: RadioButtonList> asp: Link Button runat=" server" On Click=" Refresh"Text="开始测试" <H2>测试结果</H2> <asp: label id="result"RunAt="Server"Text="No result"7> <H2>测试数据</H2> <asp: Data Grid id="Authors"runat="server" <Form> <BODY> html> 333使用 Datasets 使用 DataSets有两种方式,一是从数据库中得到,一是自己编程动态创建一个 DataSets 使用从数据库端得到的 DataSets方式主要是为了方便用户在客户端操作修改远端的数据库 管理系统中的相应信息。而使用编程创建 DataSets,是由于 DataSets的数据事先并不知道, 需要在程序运行中得到数据并填充进 DataSets。采用 DataSets作为本地数据来源中心的好处 是,应用逻辑一样的程序就与数据来源不同分开,当数据源发生变化时,就只需要修改填充 DataSets的程序而不用修改应用程序
objConn.Close() '关闭数据链路 objConn = Nothing '清除对象 Authors.DataSource = _ objDataset.Tables("Author Information").DefaultView Authors.DataBind() End Sub </script> <HTML> <BODY> <H2>测试设置</H2> <Form Action="122303.aspx" Method="Post" RunAt="Server"> <asp:RadioButtonList ID="choices" RunAt="Server"> <asp:ListItem selected Text="ADO.NET Managed Provider+ODBC" Value=1/><br> <asp:ListItem Text="ADO.NET Managed Provider+OLEDB" Value=2/><br> <asp:ListItem Text="SQL Managed Provider" Value=3/> </asp:RadioButtonList> <br> <asp:LinkButton runat="server" OnClick="Refresh" Text="开始测试"/> <br> <H2>测试结果</H2> <asp:label id="result" RunAt="Server" Text="No result"/> <br> <H2>测试数据</H2> <asp:DataGrid id="Authors" runat="server"/> </Form> </BODY> </HTML> 3.3.3 使用 DataSets 使用 DataSets 有两种方式,一是从数据库中得到,一是自己编程动态创建一个 DataSets。 使用从数据库端得到的 DataSets 方式主要是为了方便用户在客户端操作修改远端的数据库 管理系统中的相应信息。而使用编程创建 DataSets,是由于 DataSets 的数据事先并不知道, 需要在程序运行中得到数据并填充进 DataSets。采用 DataSets 作为本地数据来源中心的好处 是,应用逻辑一样的程序就与数据来源不同分开,当数据源发生变化时,就只需要修改填充 DataSets 的程序而不用修改应用程序
3331从数据库得到 DataSets的使用 使用一个从数据库获得的 DataSets较为复杂,它的步骤大概如下: 使用 SQLDataSet Command命令(SQL方式)或者 ADODataSetCommand命令(ADO方 式)从数据库管理系统中获取一个表结构及其数据填充到本地内存的 DataSet的一个 表中。 例如 Ado方式 Dim My Ds Comm As New ADODataSetCommand Dim My Comm As ADOCommand Dim My Conn As ADOConnection My Conn= New ADOConnection (Provider=sQLOLEDB. 1; Initial Catalog=Northwind; " Data Source =(local) User ID=sa; " My Comm= New ADOCommand("SELECT* FROM Customers", My Conn) My Ds Comm SelectCommand= MyComm SQL方式 Dim My Conn as SQLConnection Dim My Comm as SQLDataSet Command Dim myds as New DataSet My Conn=New SQLConnection("server=localhost uid=sa pwd=; database=pubs") My Comm=New SQLDataSetCommand("Select* from authoers'", My Conn) My Comm. FillDataSet(Myds, authers") 2.对 DataSet中的表对象 DataTable的数据进行操作,包括增加、删除、修改它的 DataRow 对象 3.使用 GetChanges方法产生一个 DataSet修改后的对象的 DataSet集合 代码如下: Dim changed DataSet As DataSet changed DataSet =ds. Get Changes( DataRowState Modified 4.通过对产生的 DataSet对象的 Haserrors属性的监控,查看是否 DataSet中的表有错 误发生
3.3.3.1 从数据库得到 DataSets 的使用 使用一个从数据库获得的 DataSets 较为复杂,它的步骤大概如下: 1. 使用 SQLDataSetCommand 命令(SQL 方式)或者 ADODataSetCommand 命令(ADO 方 式)从数据库管理系统中获取一个表结构及其数据填充到本地内存的 DataSet 的一个 表中。 例如: ·Ado 方式 Dim MyDsComm As New ADODataSetCommand Dim MyComm As ADOCommand Dim MyConn As ADOConnection MyConn = New ADOConnection _ ("Provider=SQLOLEDB.1;Initial Catalog=Northwind;" & _ "Data Source=(local);User ID=sa;") MyComm = New ADOCommand("SELECT * FROM Customers", MyConn) MyDsComm.SelectCommand = MyComm ·SQL 方式 Dim MyConn as SQLConnection Dim MyComm as SQLDataSetCommand Dim MyDs as New DataSet MyConn=New SQLConnection(“server=localhost;uid=sa;pwd=;database=pubs”) MyComm=New SQLDataSetCommand(“Select * from authoers”,MyConn) MyComm.FillDataSet(Myds,”authers”) 2.对 DataSet 中的表对象 DataTable 的数据进行操作,包括增加、删除、修改它的 DataRow 对象 3.使用 GetChanges 方法产生一个 DataSet 修改后的对象的 DataSet 集合。 代码如下: Dim changedDataSet As DataSet changedDataSet = ds.GetChanges(DataRowState.Modified) 4.通过对产生的 DataSet 对象的 HasErrors 属性的监控,查看是否 DataSet 中的表有错 误发生
5.如果有错误发生,就要对 DataSet中的各个表进行错误检查,方法一样,也是根据各 个 DataTable的 Haserrors属性。如果表中有错误发生,那么 GetErrors方法就会被激活, 并且会返回一个含有错误的 DataRow对象的数组 6.当表出错时,对于每一个 Datarow对象的 RowError属性进行检测。 7.如果可能,处理发生的错误。 8.使用 DataSet对象的 Merge方法把检测无错误发生的修改后的 DataSet合并入原先的 DataSet中,代码如下 ds Merge( changed DataSet) 9.使用 DataSetCommand对象的 update方法,把合并后的 DataSet对象送往数据库端进 行修改,代码如下: My DataSet Command. Update(ds) 10.使用 DataSet对象的 AcceptChanges方法对数据库修改进行确认,或者使用 RejectChanges方法撤消对数据库的修改代码如下 Ds AcceptChanges 3332编程实现 DataSet 1.使用 DataSet(创建器创立一个 DataSet对象 DataSet(可以跟一个字符串用以指明创建的 DataSet名字 Dim dsl as new dataSet Dim ds2 as New DataSet("MyDataSet) 2.增加一个 DataTable到 DataSet中 具体操作是,首先在 DataSet对象的 Tables集合中,增加一个表 ds. Tables. Add( New datatable(表名) 然后,再在该表中的 Columns集合中增加相应的列 ds. Tables(表名) Columns Add(列名,列类型) 例如:我们在ds对象中建立一个订购表( Order),它有三个字段,客户名CUNM)、订 货编号(ORNO)、订货数量(ORNM) Tables. Add( New DataTable(“ Order”)) ds. Tables("Order"). Columns Add("CUNM", Get Type(String))
5.如果有错误发生,就要对 DataSet 中的各个表进行错误检查,方法一样,也是根据各 个 DataTable 的 HasErrors 属性。如果表中有错误发生,那么 GetErrors 方法就会被激活, 并且会返回一个含有错误的 DataRow 对象的数组。 6.当表出错时,对于每一个 DataRow 对象的 RowError 属性进行检测。 7.如果可能,处理发生的错误。 8.使用 DataSet 对象的 Merge 方法把检测无错误发生的修改后的 DataSet 合并入原先的 DataSet 中,代码如下: ds.Merge(changedDataSet) 9.使用 DataSetCommand 对象的 update 方法,把合并后的 DataSet 对象送往数据库端进 行修改,代码如下: MyDataSetCommand.Update(ds) 10.使用 DataSet 对象的 AcceptChanges 方法对数据库修改进行确认,或者使用 RejectChanges 方法撤消对数据库的修改,代码如下: Ds.AcceptChanges 3.3.3.2 编程实现 DataSet 1.使用 DataSet()创建器创立一个 DataSet 对象。 DataSet()可以跟一个字符串用以指明创建的 DataSet 名字 Dim ds1 as New DataSet Dim ds2 as New DataSet(“MyDataSet”) 2.增加一个 DataTable 到 DataSet 中。 具体操作是,首先在 DataSet 对象的 Tables 集合中,增加一个表 ds.Tables.Add(New DataTable(表名)) 然后,再在该表中的 Columns 集合中增加相应的列 ds.Tables(表名).Columns.Add(列名,列类型) 例如:我们在 ds 对象中建立一个订购表(Order),它有三个字段,客户名(CUNM)、订 货编号(ORNO)、订货数量(ORNM) ds.Tables.Add(New DataTable(“Order”)) ds.Tables(“Order”).Columns.Add(“CUNM”,GetType(String))
ds. Tables( "Order").Columns Add(ORNO,, Get Type(String)) ds. Tables“ Order)Col ds. Tables("Order"). Primary Key= New dataColumn(ds. Tables(“ Order”). Columns(“ORNO”) 在上面的例子中,我们还设置了订购表的键值,这是通过对它的 Primary Key的属性设 置来得到的,设置键值的好处在于可以防止相同记录的输入,保证数据的唯一性。 3.设置表间的关系 由于 DataSet对象中可以含有多个 DataTable,而事实上每一个表又不可能与其他的表没 有任何的关系,这样就带来了一个问题,我们如何描述两个不同的表之间的关系? asp. net 提供了 DataRelation对象来描述表和表之间的关系。 DataRelation对象至少需要两个参数 才能确定两个表之间的关系,这是因为在两个表的关系中,至少需要一个主键列和一个外 键列,才能确定两者之间的对应关系 例如:关于客户购物有两个表,一个是客户信息表( Customer),一个是购物信息表 ( Order),很显然它们两者之间存在着某种联系。经过分析,我们发现客户编号(CUNO) 在两个表中都存在,它使我们能够把两个表的信息连接起来,告诉我们这样一个事实,谁 订购了什么物品。因此需要建立关于客户信息表和购物信息表的一个联系,用 Asp. net语 言表达如下: Dim ds as dataSet ds Relations. Add("CustomerOrder'", ds. Tables("Customer"). Columns("CUNO) ds. Tables(“ Order”). Columns(“CUNO) 4.在关系表间的浏览 通过 DataRelaiton的设置,我们可以在同一个 DataSet中,由对一个表操作,找到可能 引起的相关表的变化。例如,对于客户信息表中的对应于某个人的一条记录,我们可以在 购货信息表中找到所有属于他的购货信息,演示代码如下 dim order Rows( as DataRow order rows=ds. Tables("Customer"). ChildRelations("CustomerOrder"). GetChild Rows( ds. Tables“ Customer”).Rows(0) 5.数据约束的使用 在关系数据库中,使用数据约束的目的是为了使数据库的一致性得到保证。当数据发生 改变时,数据约東被执行,用以检查对数据的修改,是否和已经定义的规则相符合,如果 不符合修改将不能生效。在 asp. net中提供了两种数据约束, ForeignKey Constraint和 Unique Constraint ForeignKey Constraint,外键值一致性约束,定义当表中的一条记录被删除或者是增加 条记录时,与该表相关的其他表的相应记录如何处理。例如,当一个客户被人从客户信息 表中删去,那么在购物信息表中的关于他的购物信息的记录如何处理等等。 ForeignKey Constraint有五个可能的值如下 Cascade当表中记录被删除或者更新以后,对应表中的记录相应被删除和更新
ds.Tables(“Order”).Columns.Add(“ORNO”,GetType(String)) ds.Tables(“Order”).Columns.Add(“ORNM”,GetType(int32)) ds.Tables(“Order”).PrimaryKey= New DataColumn(ds.Tables(“Order”).Columns(“ORNO”) 在上面的例子中,我们还设置了订购表的键值,这是通过对它的 PrimaryKey 的属性设 置来得到的,设置键值的好处在于可以防止相同记录的输入,保证数据的唯一性。 3.设置表间的关系 由于 DataSet 对象中可以含有多个 DataTable,而事实上每一个表又不可能与其他的表没 有任何的关系,这样就带来了一个问题,我们如何描述两个不同的表之间的关系?asp.net 提供了 DataRelation 对象来描述表和表之间的关系。DataRelation 对象至少需要两个参数 才能确定两个表之间的关系,这是因为在两个表的关系中,至少需要一个主键列和一个外 键列,才能确定两者之间的对应关系。 例如:关于客户购物有两个表,一个是客户信息表(Customer),一个是购物信息表 (Order),很显然它们两者之间存在着某种联系。经过分析,我们发现客户编号(CUNO) 在两个表中都存在,它使我们能够把两个表的信息连接起来,告诉我们这样一个事实,谁 订购了什么物品。因此需要建立关于客户信息表和购物信息表的一个联系,用 Asp.net 语 言表达如下: Dim ds as DataSet … ds.Relations.Add(“CustomerOrder”,ds.Tables(“Customer”).Columns(“CUNO”), ds.Tables(“Order”).Columns(“CUNO”)) 4.在关系表间的浏览 通过 DataRelaiton 的设置,我们可以在同一个 DataSet 中,由对一个表操作,找到可能 引起的相关表的变化。例如,对于客户信息表中的对应于某个人的一条记录,我们可以在 购货信息表中找到所有属于他的购货信息,演示代码如下: dim orderRows() as DataRow orderRows=ds.Tables(“Customer”).ChildRelations(“CustomerOrder”).GetChildRows( ds.Tables(“Customer”).Rows(0)) 5.数据约束的使用 在关系数据库中,使用数据约束的目的是为了使数据库的一致性得到保证。当数据发生 改变时,数据约束被执行,用以检查对数据的修改,是否和已经定义的规则相符合,如果 不符合修改将不能生效。在 asp.net 中提供了两种数据约束,ForeignKeyConstraint 和 UniqueConstraint。 ForeignKeyConstraint,外键值一致性约束,定义当表中的一条记录被删除或者是增加一 条记录时,与该表相关的其他表的相应记录如何处理。例如,当一个客户被人从客户信息 表中删去,那么在购物信息表中的关于他的购物信息的记录如何处理等等。 ForeignKeyConstraint 有五个可能的值如下: ·Cascade 当表中记录被删除或者更新以后,对应表中的记录相应被删除和更新