ado.net 绝对入门的好东西(转)

mac2022-06-30  24

1.        dataAdapter对象 数据适配器对象是数据提供者OracleConnection对象和dataset对象之间的管道。它是一个非常复杂的数据读取器,也可以改变数据源。打开数据集以后,我们所有的操作都可以对数据集进行而不是对数据源进行了。 下面是使用代码新建一个OracleDataAdapter对象的例子: Dim strConn As String = "user id=JBTTM;data source=SCUT;password=JBTTM" Dim Conn As New OracleConnection(strConn) Dim cmd As New OracleCommand("select * from student", Conn) Dim oraAdapter As New OracleDataAdapter oraAdapter.SelectCommand = cmd   oraAdapter.Fill(dst, "student") DataGrid1.DataSource = dst.Tables("student")   我们需要注意数据适配器对象的几个属性和方法,如selectCommand等四个属性,是数据适配器对象能够使数据集完成数据查询更新等操作的关键。在使用设计工具设计适配器对象时,我们一般都可以自动设置它们。 在我们产生一个新的数据适配器的时候,SelectCommand属性会被自动设置,这是必须的。如果我们希望适配器可以完成更新类的行为,可以设置其它的Command参数,当然,后面三个insert、update和delete三个命令参数也会被设置。 下面是使用手工方法设置的例子: cmd = New OracleCommand("INSERT INTO Dept (DeptNo, DName) " & "VALUES (:pDeptNo, :pDName)", conn) cmd.Parameters.Add("pDeptNo", OracleType.Number, 2, "DeptNo") cmd.Parameters.Add("pDName", OracleType.NVarChar, 14, "DName") da.InsertCommand = cmd   OracleDataAdapter的两个方法,如Fill和Update都是重要的,前者可以将得到的数据装载到数据集的一张表中去,而后者可以用于更新一个数据集对象。Update方法的更新是基于一个Dataset的,如果我们将一个表数据绑定到一个datagrid控件,我们在修改、添加和删除数据后,只需要使用Update方法就可以将数据保存到数据库中去。   在数据的获取中,我们也可能需要使用不同的字段名,比如将英文改为中文等,这个过程尽管我们也可以修改datagrid控件的属性,但是我们也可以通过产生一个映射表的方式来完成,如下面的代码: Dim myMap As New DataTableMapping("student", "stu") With myMap.ColumnMappings      .Add("SID", "编号")      .Add("NAME", "姓名")      .Add("AGE", "年龄")      .Add("ADDR", "地址") End With   OracleDataAdapter1.TableMappings.Add(myMap) OracleDataAdapter1.Fill(DataSet11, "student") DataGrid1.DataSource = DataSet11 DataGrid1.DataMember = "stu" 在下面所有的例子中,我们都是使用一个数据适配器对象来往数据集中填充一个表的。   2.        commandBuilder对象 它可以给dataAdapter对象自动生成删除,插入和更新的属性,用于处理数据更新等操作。在不使用工具配置一个适配器对象的时候,我们一般都仅仅设置dataAdapter对象的selectCommand属性,这个时候如果进行Update方法就会出现异常,因此必须使用commandBuilder对象来设置,其设置的方法非常简单: Dim combuild As New OracleCommandBuilder(OracleDataAdapter)   3.        DataSet 对象 DataSet是数据在内存中的断开副本,它是在system.data空间中定义的,这意味着无论使用何种数据源,dataset都是一样的,它就是在内存中的一个数据库。什么时候需要使用DataSet呢?如果数据源有多个,如果在各个层之间交换数据,如果使用XML服务,如果对数据进行重复性操作和如果使用大量数据的话,建议使用Dataset对象。 这种方法取出数据需要dataAdapter作为媒介。下面是一个例子: Dim pDs As DataSet pDs = New DataSet Dim pAdapter As OracleDataAdapter pAdapter = New OracleDataAdapter("select * from sde.catalog", pConn) pAdapter.Fill(pDs, "catalog") '将选出的数据放入一个表中 Dim i As Integer For i = 0 To pDs.Tables(0).Rows.Count - 1     '下面的语句可以将表的结构输出     MessageBox.Show(pDs.Tables(0).Columns(i).ToString) Next   在一个数据集中需要使用两个或以上的表的时候,我们就必须配置多个dataAdapter对象,下面的代码是有两个数据表的一个数据集对象,使用TreeView控件来控制。下面是在Load事件中: Dim rootnode As New TreeNode("表") TreeView1.Nodes.Add(rootnode) Dim i As Integer Dim j As Integer For i = 0 To DataSet11.Tables.Count - 1     Dim tablename As New TreeNode(DataSet11.Tables(i).TableName)     rootnode.Nodes.Add(tablename)     For j = 0 To DataSet11.Tables(i).Columns.Count - 1         Dim fieldname As New TreeNode(DataSet11.Tables(i).Columns(j).ColumnName)         tablename.Nodes.Add(fieldname)     Next Next 下面的代码在TreeView的AfterSelect事件中: If TreeView1.SelectedNode.Text = "表" Then Exit Sub  If TreeView1.SelectedNode.Parent.Text = "表" Then        DataSet11.Clear()        OracleDataAdapter1.Fill(DataSet11)        OracleDataAdapter2.Fill(DataSet11)        DataGrid1.DataSource = DataSet11        DataGrid1.DataMember = TreeView1.SelectedNode.Text End If 这样,当我们点击表名称节点的时候,在一边的DataGrid控件中就会出现这个表的数据。   4.        dataTable对象 dataTable是dataset对象中所包含的对象,一个dataset对象可以有多个dataTable,在ADO中recordset的概念与dataTable最为接近。我们知道,在ADO中,查看数据有moveNext等语句,可以让数据游标移动,但是在ADO.NET中,却不支持游标。 我们可以在一个dataSet中新建一个dataTable,下面是代码,生成一个有两个字段的表: ds.Tables.Add("BigTable") ds.Tables(0).Columns.Add("ID", Type.GetType("System.Int32")) ds.Tables(0).Columns("ID").Unique = True ds.Tables(0).Columns.Add("Value", Type.GetType("System.Int32"))   在数据表对象中没有直接提供查找、排序和筛选的方法,但是我们可以使用它的defaultview属性来实现这个功能,后面这个属性(其实是一个视图对象),拥有Find、Sort和RowFilter方法。下面是一个使用代码,数据表已经被Fill进入了数据集对象: Dim str As String = "SID>1003" DataSet11.Tables(1).DefaultView.RowFilter = str DataGrid1.DataSource = DataSet11.Tables(1)   dataTable对象本身提供了一个select方法用于选择数据,下面是一个例子: Dim dtRow() As DataRow Dim dr As DataRow dtRow = DataSet11.Tables(1).Select("SID>1003", "SID DESC") For Each dr In dtRow       ComboBox1.Items.Add(dr("name")) Next   5.        dataRow dataRow对象是数据表中的一行记录,我们可以通过多种方式得到,新建一个数据行的代码是: Dim drow As DataRow drow = DataSet11.Tables(0).NewRow 然后,我们可以给这个数据行对象填入数据,最后写上下面的语句将它添加到数据表中: DataSet11.Tables(0).Rows.Add drow   将一个数据行删除的方法有两种,一是使用remove方法,另一种是使用delete方法,当时后一种方法仅仅是将数据做上删除的标记,需要使用AcceptChange方法真正删除。 方法一: Mytable.Rows.Remove(mytable.row(1)) 方法二: Mytable.rows(1).delete Mytable.AcceptChange   6.        dataColumn 数据列是我们使用代码新建数据表时需要产生的对象。   7.        数据关系dataRelation对象 Dataset作为一个可以容纳数据表的内存容器对象,不可避免地,这些数据中将存在关系,而关系也是dataset的一个重要属性对象。 下面是一个产生数据关系对象的代码: Dim par As DataColumn Dim chi As DataColumn par = DataSet11.Tables("press").Columns("pressid") chi = DataSet11.Tables("booklist").Columns("pressid")   Dim rel As New DataRelation("bookpress", par, chi) DataSet11.Relations.Add(rel) 当我们使用可视化工具往一个dataset中装载进两个表的时候(每个表都需要使用一个自己的适配器,并且表拥有一些限制规则,如唯一性,主键,外键等),我们可以在数据集的架构中为两个表设置关系属性,在关系属性设置后,当我们往数据集中Fill数据的时候,需要先保证数据的限制规则不起作用,否则会出现限制问题,代码如下: DataSet11.EnforceConstraints = False OracleDataAdapter1.Fill(DataSet11) OracleDataAdapter2.Fill(DataSet11) DataGrid1.DataSource = DataSet11.PRESS 在数据装载后,我们需要使限制规则有效,再加上下面的代码: DataSet11.EnforceConstraints = True   下面我们再来讨论一个问题:如何在一个datagrid显示主表,而在另一个datagrid中显示关联表: 'tempDt是一个临时的数据集对象 Dim tempDt As New DataSet   tempDt.EnforceConstraints = False OracleDataAdapter1.Fill(tempDt) OracleDataAdapter2.Fill(tempDt) tempDt.EnforceConstraints = True '将临时数据集合并到dataset11中去,dataset11中保存了两个表的关系pressbook DataSet11.Merge(tempDt) '绑定数据 DataGrid1.SetDataBinding(DataSet11, "press") DataGrid2.SetDataBinding(DataSet11, "press.pressbook")   数据导航: 在数据显示中,我们通常都需要使用按钮来获得诸如“第一条数据”“下一条数据”等内容,其代码如下: Dim ps As CurrencyManager ps = Me.BindingContext(DataSet11, "press") 上面的ps可以将数据集中的press表绑定状态,而显示表的datagrid也会制动绑定ps。 第一条数据: ps.Position = 0 最后一条数据: ps.Position = ps.Count – 1 往后一条: ps.Position += 1 往前一条: ps.Position -= 1   TextBox控件的数据绑定代码: TextBox1.DataBindings.Add("text", DataSet11, "press.name") 它绑定了数据集中一个表的某个字段。   8.        dataView 数据视图对象其实是一个虚表,它可以在一个实际存在的表的基础上创建,从而生成一个新的视图供用户使用,如: Dim pDataView As DataView pDataView = New DataView(pDs.Tables("cate"), "d<4", "objectid", DataViewRowState.CurrentRows) GridControl2.DataSource = pDataView   9.        往表中存入一条数据(下面的方法更简单) Dim pDs As DataSet pDs = New DataSet Dim pAdapter As OracleDataAdapter pAdapter = New OracleDataAdapter("select * from sde.catalog", pConn) pAdapter.Fill(pDs, "catalog")  '在数据集中产生一个表, dim pTable As DataTable Dim pRow As DataRow pTable=pDs.Tables("catalog") pRow = pTable.NewRow pRow(0) = 7 pRow(1) = "aa" pRow(2) = 1 pRow(3) = "aa" pRow(4) = 20 pTable.Rows.Add(pRow) pAdapter.Update(pDs, "catalog")   10.    更新一条数据(7的方法更简单) 如果我们要更新objectid=10的数据,其方法为: Dim pRowColl As DataRow() Dim dataRow As DataRow Dim pTable As DataTable pTable = pDs.Tables("catalog") pRowColl = pTable.Select("objectid=10") dataRow = pRowColl(0) dataRow(1) = "bbb" pAdapter.UpdateCommand = pCmdBui.GetUpdateCommand pAdapter.Update(pDs, "catalog")   11.    删除一条数据 如何删除一条记录我还摸索了好半天,最好终于发现了一个简单无比的方法: Dim pCommand As OracleCommand pCommand = New OracleCommand pCommand.CommandText = "delete  from sde.catalog where objectid=10" pCommand.Connection = pConn   '数据库的连接 pCommand.ExecuteOracleNonQuery() 其实数据的插入也完全可以这样做的这样简单。 pCommand.CommandText = "insert into sde.catalog values(10,'aa',10,'aa',10)" 比上面的插入一条记录的方法简单多了。   12.    更新数据: pCommand.CommandText = "update sde.catalog set name='bbc',cate_intro='bbc' where objectid=10"   13.    ADO.NET中的XML 由于ADO.NET模型传递数据是使用XML结构,所以要得到我们获取的表的结构就更容易不过了 dim pXml as string pXml=pDs.getXml 可以看看pXml的内容,是符合XML结构的数据。如果是一个dataset获取一个XML文件,也非常简单 Dim pDa as new Dataset Dim pStreamReader as new StreamReader(“test.xml”) pDa.readxml(pStreamReader) dataset还有一个方法可以将xml文件直接写到文件上writeXml()。

转载于:https://www.cnblogs.com/sekon/archive/2012/01/27/2330226.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)