zoukankan      html  css  js  c++  java
  • 《.NET分布式应用程序开》读书笔记 第三章:断开连接式的数据

    在这一章,我们主要介绍.NET中的数据访问技术:ADO.NET.

    ADO.NET的架构

    27y4ybxw_ado_2(en-us,VS_71)

    从图中可以看到,ADO.NET中的类分为两种:

    • 1.连接提供程序类(Connection,Command,DataReader等)
    • 2.数据类(DataSet,DataTable,DataView等)
    • 这两种分类和我在前一章中介绍的组件分类是一致的.

    连接提供程序类

    不同的数据库,使用不同的Provider来访问数据库..NET框架公开了一组公共的接口,可以让数据库厂商实现自己的Provider.内置的数据Provider有:

    1.System.Data.SqlClient(访问Sql Server)

    2.System.Data.OracleClient(访问Oracle,不过Oracle自己提供了更好的Privider,叫ODP.NET,建议直接用这个)

    3.System.Data.OleDb(用OleDb协议访问数据库)

    4.System.Data.Odbc(用Odbc协议访问数据库)

    在.NET1.1中,使用工厂模式现实这种Provider模型.如:System.Data.Sqlclient.SqlConnection现实了System.Data.IDbConnection.

    在.NET2.0中,使用了抽象工厂现实这种Provider模型.如:System.Data.Sqlclient.SqlConnection继承于System.Data.Common.DbConnection,而System.Data.Common.DbConnection实现了System.Data.IDbConnection.

    通过使用工厂,我们很容易编写通用的数据访问代码,而不用考虑后面的数据库.如下面的示例中,你可以将System.Data.SqlClient存在配置文件中,在运行时读取:

    var factory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlClient");                   

    var conn = factory.CreateConnection();
    var cmd = factory.CreateCommand();
    var cmbBuilder  = factory.CreateCommandBuilder();
    var adp= factory.CreateDataAdapter();
    var parm = factory.CreateParameter();

    要知道自己机器上注册了哪些Provider,可以调用这个访法:

    DataTable registeredProviders = System.Data.Common.DbProviderFactories.GetFactoryClasses();

    DataSet

    简单来说,DataSet就是内存中的数据库.它支持继开式的数据访问和更新.基于Xml存储数据,很容易地序列化/反序列化Xml数据.DataSet这种大粒度的数据访问,很适合在分布式系统中使用.另一个优点是它是基于"集合式"的数据结构,极大地简化了客户端程序的编写.

    zb0sdh0b_ado_1(en-us,VS_71)

    注意,DataSet(还有DataTable,DataColumn)有一个ExtendedProperties属性,它本质是一个字典一样的东西.你可以存储一些自定义的属性,如DataSet的生成日期,过期日期等.

    如:

    ds.ExtendedProperties.Add("Expiredate", DateTime.Now.AddHours(8));
    ds.ExtendedProperties.Add("Author", "Rock Niu");

    DataAdapter

    DataSet中的数据怎么从DB拉下来,怎么更新回DB,都得靠DataAdapter(数据适配器),下图是DataAdapter的结构图:

    未命名

    在构造DataAdapter时,通常我们要指定SelectCommand,它用来在DataAdapter.Fill(DataSet)时查询数据.

    Update, Insert, Delete这几个Command只在调用DataAdapter.Update(DataSet)时才会用到,它们可以由CommanBuilder帮我们自动生成.不过它动态生成时,会访问表的元数据,且Command中会把所有列放在where条件中,这会影响性能.建议大家自己指定Update, Insert, Delete这几个Command的Text,最好用存储过程,这样性能最好.

  • 相关阅读:
    特征选择方法之信息增益
    6 个优秀的开源 OCR 光学字符识别工具
    Python中type与Object的区别
    Python type类具体的三大分类:metaclasses,classes,instance
    如何去除List中的重复值?
    type,isinstance判断一个变量的数据类型
    Python图形界面开发包 PyGTK
    python使用easygui写图形界面程序
    opencv-python 学习笔记2:实现目光跟随(又叫人脸跟随)
    Tomcat全攻略
  • 原文地址:https://www.cnblogs.com/rockniu/p/1553395.html
Copyright © 2011-2022 走看看