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"); //列映射

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

  • 相关阅读:
    jenkins 自动化打包flutter android apk
    k8s 玩转 jenkins
    ceph rbd 找回 pvc
    mysql学习教程之mysql管理
    php链接mysql,php链接mysql的常用方法
    mysql从零开始之MySQL 教程
    mysql从零开始之MySQL 安装
    MySQL8.0.20下载与安装详细图文教程,mysql安装教程
    MySQL8.0.20安装教程,MySQL8.0.20安装详细图文教程
    windwos10安装mysql8.0.20详细图文教程
  • 原文地址:https://www.cnblogs.com/whtydn/p/1583994.html
Copyright © 2011-2022 走看看