zoukankan      html  css  js  c++  java
  • 加深认识与理解ADO.NET

    ADO.NET有两个基本的部分:DataSet和Managed Provider。下面对DataSet的简短概述其常用方法
    DataSet是指内存中的数据库,它提供了一致的程序设计模型,而不管其来自何处。DataSet由一组表、列、行、约束和关系组成。这个用于DataSet的对象模型如下所示:



    数据表(DataTable)是指内存数据表。它包含一个表示该表的模式的列集合(ColumnsCollection)。一个数据表还包含有一个列集合(RowsCollection),表示该表所拥有的数据。它记得最初的的状态以及当前的状态,并跟踪已经发生的各种变化。
    要使用数据表,用户必须包含System.Data。

    创建数据表

    DataTable有两个构造函数:
    public DataTable()
    public DataTable(string tableName)

    给数据表添加列
    DataTable包含一个DataColumn对象集合。这个列集合定义了该表的结构。要给这个集合添加一个新列,可以使用这个集合的Add方法。

    在下面的例子中,我们使用ColumnsCollection类的Add方法,给一个数据表添加了3列;这种方法指定了ColumnName和DataType属性。

    1 DataColumn dc = null;
    2 DataTable dt = new DataTable("test");
    3 dc = dt.Columns.Add("CustID",System.Type.GetType("System.Int32") );        
    4 dc = dt.Columns.Add("CustomerNameLast", System.Type.GetType("System.String") );
    5 dc = dt.Columns.Add("CustomerNameFirst", System.Type.GetType("System.String") );
    6 dc = dt.Columns.Add("Purchases", System.Type.GetType("System.Double") );


    DataTable上的ColumnsCollection的Add方法有两个重载(overload)函数:
    Public DataColumn Add(String columnname, Type type)
    Public DataColumn Add(String columnname)

    表达式列

    ADO.NET还允许用户创建和定义表达式列。ADO+中的表达式用于进行:过滤, 计算, 汇总列信息
    要创建一个表达式列,需要将DataType属性设置为适合该表达式返回数值的类型;然后将Expression属性设为一个有效的表达式:
    DataColumn dc = New DataColumn;
    dc.DataType = System.Type.GetType("System.Currency");
    dc.Expression = "total * .086";

    你还可以使用Add方法来创建一个表达式列。例如,下面的代码添加了一列,根据客户购买金额的10%计算折扣。这个表达式将名为“Purchases”的列乘以10%。
    DataColumn dc = New DataColumn;
    dc= dt.Columns.Add("rectg", System.Type.GetType("System.Double"), "total * 0.1");
    当这个表加入数据后,这个列的数值将是total列中数值的10%

    自动增量列
    DataColumn的另一个特性是其能够作为自动增量列的能力。自动增量列在添加新列时,自动增加该列中的数值。要创建一个自动增量列,需要将这个列的AutoIncrement属性设为真(true)。一旦设置了这个属性,该列开始时将使用该列的AutoIncrementSeed属性中定义的数值。在添加了一列后,自动增量列的数值将按该列的AutoIncrementStep属性中的数值作为步长递增。
    dc = dt.Columns.Add("CustID",System.Type.GetType("System.Int32") );
    dc.AutoIncrement = true;
    dc.AutoIncrementSeed = 1;
    dc.AutoIncrementStep = 1;

    为表创建一个主关键字
    dt.PrimaryKey = new DataColumn[] {dt["CustID"]};

    给表添加数据

    现在已经有一个有列和关键字的表,那么可以添加一些数据了。
    DataRow dtRow = null;
    for (int i = 0; i <= 9; i++)
    {
      dtRow = dt.NewRow();
      dtRow[0] = i;
      dtRow[1] = "CustName" + i.ToString();
      dt.Rows.Add(dtRow);
    }

    列状态

    每个数据行(DataRow)都有一个RowState(列状态)属性,可以用这个属性来确定它的状态。

    在上面的例子中,新建行的RowState属性被设为Detached(分离);一旦使用Add方法将它添加到RowsCollection中,RowState属性就变为New。

    RowState 描述
    Unchanged 自上一次调用AcceptChanges后,没有发生变化。
    New  该行已经被添加到表中,但还没有调用AcceptChanges。
    Modified 该行的某些元素已被改变。
    Deleted  已使用Delete方法将该行从表中删除。
    Detached 或者该行已被删除,但还没有调用AcceptChanges;或者该行已被创建,但还没有被添加到表中。

    从表中删除或移除一个数据行

    当用户对表中的数据进行处理时,有时需要从表中移除(remove)一行或多行。但是要注意, 移除(removing)一行与将一行作为Deleted删除不同。移除一行意味着物理地将行从数据集中去掉。这种差别在后面讨论保持表或数据存储中数值时很重要。
    要从表中移除一行,可以使用它的索引或实际实例,调用该表RowsCollection的Remove方法

    dt.Rows.Remove(3);
    在调用这个方法后,指定的行将被从行集合中移除

    dt.Rows[3].Delete
    将一行标记为Deleted表示,当DataTable对象的AcceptChanges方法被调用时,该行将被从表中移除。从而,该行的RowState属性为Deleted。相反,如果调用RejectChanges方法,这一行的RowState属性将恢复到在被标记为Deleted之前的状态。

    处理表的数据过滤
    DataRow[] CurrRows = dt.Select(条件);
    Select方法使得用户可以在三个元素的基础上对行进行检索:过滤器表达式、排序次序和按DataViewState。


     

    数据集Datset

    数据集提供了两个基本的构造函数
    public DataSet()
    public DataSet(string DataSetName)

    给数据集添加一个数据表

    DataTable dt= new DataTable("User");
    DataSet ds=new DataSet();
    ds.Tables.Add(dt);

    在两个表之间添加关系
    由于数据集(DataSet)可以包含多个DataTable对象,因此必须有方法来将表彼此关联起来。这是在表之间进行导航和返回相关数值所必需的。
    DataRelation(数据关系)的基本自变量是关系中作为主关键字和外部关键字的两列,以及DataRelation的名称。然后这个名称可以用于导航或检索数值时使用。
    ds.Relations.Add(...);
    dr = new DataRelation(...);
    ds.Relations.Add(dr);

    Managed Provider

    Command、Connection和DataReader
    Command、Connection和DataReader代表了ADO模型的核心元素。Connection懂得如何连接特定的数据存储。微软公司在NGWS框架中提供了两个Connection对象:SQLConnection和ADOConnection。SQLConnection懂得如何连接Microsoft SQL Server数据库。

    设置表和列映射
    workDSCMD.TableMappings.Add("Table", "MyAuthors");  //表映射
    workDSCMD.TableMappings[0].ColumnMappings.Add( "au_id", "AuthorID"); //列映射

    还有好多其它的方法,只是今天重看这方面的资料,写下来当成一个以后的资料文档吧!

  • 相关阅读:
    第4月第1天 makefile automake
    第3月30天 UIImage imageWithContentsOfFile卡顿 Can't add self as subview MPMoviePlayerControlle rcrash
    第3月第27天 uitableviewcell复用
    learning uboot fstype command
    learning uboot part command
    linux command dialog
    linux command curl and sha256sum implement download verification package
    learning shell script prompt to run with superuser privileges (4)
    learning shell get script absolute path (3)
    learning shell args handing key=value example (2)
  • 原文地址:https://www.cnblogs.com/whtydn/p/1583994.html
Copyright © 2011-2022 走看看