ADO.NET访问数据-(2) DataSet本地缓存与数据库的交互过程,以及应用

大半夜的睡不着觉 ,被宿舍的一群狼给吵醒了,于是就继续写博客。。。。  

 

  在前面一个 ADO.NET  数据库文章中  我说过  ADO.NET  允许用户在断网的情况下 对数据库进行 "操作" ,注意这里的操作 我带了 引号 !!!

    其实在ADO.NET 中  我们可以先从数据库将 一个数据库的子集下载 到本地内存中,然后这个子集 会驻留在客户机中,这时候 我们对数据库的修改 实际上是对 本地缓存的

   修改,等一切操作完成之后 ,我们再将位于本地缓存中经过修改后的数据库子集 反映到数据源。  所以在将数据库子集下载到本地之后,那么网络连接不连接 都不重要了 ,只要我们在最后提交修改的时候 我们连接上网络 就 OK了 。 

    那么什么时候用到 DataSet呢?   

    你可能有过这样 的经历,在网上购物的时候 是不是在选择后 货物之后 进行一次性提交?  

     对,就是这样 ,这样做的目的就是为了减少网络流量,减少资源的消耗 ,以及预防异客户机常断开网络时的非完整性操作   。 

    假如我们每进行一次操作那么都进行数据库的 读取或写入操作 那么 对网络资源的消耗是非常大的 ,DataSet很好的解决了这个问题  。

     

使用这个技术就要明白几个概念 ,当初我学习的时候 ,一直纠结着我的问题 !!!

 

 ConnectionString

 ("Data Source=.\SQLEXPRESS;Initial Catalog=StudentSystem;Persist Security Info=True;User ID=sa;Password=7603835")   带密码
("Data Source=XIAOWEI\SQLEXPRESS;Initial Catalog=StudentSystem;Integrated Security=True")  直接连接本机

 

1、SqlDataAdapter  类   ,以及作用

   这个类代表了 与数据库的链接以及要执行的SQL 命令 ,用它的执行结果用来填充DataSet对象,并且更新一个数据库.     SqlDataAdapter就表示了 数据源 和 DataSet之间进行交互的 桥梁 .     可能说道这里还是比较模糊,不要紧 下面我会给出使用代码    

 

下面是SqlDataAdapter类的几个构造函数 以及用法 ,不管你用何种构造函数 你必须保证SqlDataAdapter类的 SelectCommand 和SqlConnection 属性必须被赋值

 

  Name Description
  SqlDataAdapter() Initializes a new instance of the SqlDataAdapter class.
  SqlDataAdapter(SqlCommand) Initializes a new instance of the SqlDataAdapter class with the specifiedSqlCommand as theSelectCommand property.
  SqlDataAdapter(String, SqlConnection) Initializes a new instance of the SqlDataAdapter class with aSelectCommand and aSqlConnection object.
  SqlDataAdapter(String, String) Initializes a new instance of the SqlDataAdapter class with aSelectCommand and a connection string.

 

 

 

2、SqlCommandBulder    类的作用  

     我们知道  SqlDataAdapter是 DataSet和数据源进行交互的 桥梁 ,就是说我们对 数据源所作的 更改 是通过 SqlDataAdapter这个桥梁反映到  数据源的  

     但是大家可能 只知道 这个桥梁负责  进行数据命令传递,但是 却忽略了  我们在通过桥梁进行 DataSet和 数据源链接的同时 ,  桥梁的作用也是通过 SQL命令实现的

    

  SqlCommandBuilder(SqlDataAdapter)
  这是SqlCommandBuilder的 构造方法  ,需要的参数是一个 SqlDataAdapter类的对象 作为参数  .

     我们只需要在我们的程序中添加如下代码即可 ,记住一定要添加 否则 操作会出错

     Dim   cm  as new  SqlCommandBuilder(参数是SqlDataAdapter类的对象)      //这句话在SqlDataAdapter对象调用 Update方法之前一定要先加上

    创建一个 SqlCommandBuilder类的对象就可以 自动为 SqlDataAdapter类的    UpdateCommand    DeleteCommand  和 InsertCommand进行赋值  

    这三个属性实现的就是桥梁作用的SQL语句

 

 

要记住的一点是 ,一个本地缓存就是 DataSet对象   一个数据表就是 DataTable对象  一个 行就是  DataRow对象  一个列就是 DataColumn对象  可以方便我们理解

简单的使用代码 如下  :

Imports System.Data
Imports System.Data.SqlClient '引入SQL SERVER类型化类名字空间
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Using cn As New SqlConnection
            cn.ConnectionString = "Data Source=XIAOWEI\SQLEXPRESS;Initial Catalog=MyDB;Persist Security Info=True;User ID=sa;Password=7603835"  '数据库链接字符串
            cn.Open()  '在SqlConnection对象构造完毕之后一定要调用 open函数打开数据库  我在写这个程序的时候就忘记了 哈哈
            Dim sql As String = "select *  from info"
            Dim ad As New SqlDataAdapter(sql, cn)  '创建一个 SqlDataAdapter类的对象 作为 DataSet和数据源之间的桥梁
            Dim ds As New DataSet
            ad.Fill(ds)  'SqlDataAdapter 对象调用 Fill 方法 执行 SQL语句并将结果集 填充到 DataSet对象中   并且添加默认映射表 table  
            For Each row As DataRow In ds.Tables(0).Rows  '每个DataSet类中包含的tables属性是一个 DataTable类的集合  DataTable类中的  Rows 和Columns属性分别是 DataRow 类和DataColumn类的集合
                DataList.Items.Add(row(0) + row(1)) '注意在 ADO.NET中表行列索引都是基于 0开始的 在JDBC中是基于1开始的
            Next
            Dim cmd As New SqlCommandBuilder(ad) '创建一个SqlCommandBuilder对象 对数据库的更新 的SQL操作由这个对象自动生成
            '  Dim tem As DataRow = ds.Tables(0).NewRow   '这里的DataRow对象是相对于 数据表而言的 如果我们不调用 DataTble的 NewRow那么所创建的DataRow就跟数据库无关了
            '  tem(0) = "xiaowei"
            '   tem(1) = "new user" '为新的行赋值
            '    ds.Tables(0).Rows.Add(tem)
            '    ad.Update(ds)  '更新本地缓存到数据库

            '    Dim modi As DataRow = ds.Tables(0).Rows(2)  '获得缓存中第一个表的第3行
            ' cmd.GetUpdateCommand()
            '  modi.BeginEdit()
            '  modi(0) = "修改后"
            '   modi(1) = "修改后"
            '   modi.EndEdit()
            '    ad.Update(ds)  '更新本地缓存到数据库 

            '如果表没有定义主键的话那么在更新DataSet的时候就会出现错误,比如说不支持UpdateCommand的命令等等、、、、、

 

        End Using   '在使用完毕 自动关闭和数据库的链接 使用USing 代码段
    End Sub
End Class

 

时间: 2024-08-01 09:59:20

ADO.NET访问数据-(2) DataSet本地缓存与数据库的交互过程,以及应用的相关文章

如何将RDS的数据同步到本地自建数据库

长期以来有很多的用户咨询如何将RDS的数据同步到本地的数据库环境中,本篇文章以在阿里云的ECS服务器为例来说明如何将RDS的数据同步到本地数据库中.RDS对外提供服务是一个DNS地址+端口3306,这样就屏蔽了RDS后端的主从节点,那么该如何将数据同步到本地?那么我们来看一下RDS的主从架构: 应用连接RDS,流量通过SLB指向主从节点的master,所以如果我们连接RDS的账户具有REPLICATION SLAVE, REPLICATION CLIENT的权限,则就可以把主库master的产生

大量图片本地缓存-客户端访问网站缓存所有图片,再次访问时先读取缓存图片,若被清除,再从服务器下载

问题描述 客户端访问网站缓存所有图片,再次访问时先读取缓存图片,若被清除,再从服务器下载 标题已经说的很清晰了.一个功能 我网站上有大量的图片,然后为了减少服务器负担,需要将客户访问过的页面图片缓存在客户端,再次访问时,判断本地缓存是否存在该图片,若有则直接读取本地缓存的图片:若无,在服务器上重新加载一次并添加缓存. 一些博客什么的都查过了,多多少少不适用.... 大神们,最好可以提供一个简易的demo.....万分感激! 解决方案 这个浏览器会自动判断的不要你操心. 解决方案二: 服务器设置图

使用 ADO.NET 访问 Oracle 9i 存储过程

ado|oracle|存储过程|访问 摘要:使用 Microsoft .NET 框架 1.1 中的 Microsoft .NET Oracle 提供程序访问 Oracle 存储过程和函数. 本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程(称为 SQL 编程块)和函数(返回单个值的编程块). 您可以使用以下托管数据提供程序连接到 Oracle 数据库:Microsoft .NET Oracle 提供程序.OLE DB .NET 提供程序.ODBC .NET 数据提供程序以及 Or

通过ADO.NET访问数据库

ado|访问|数据|数据库 通过ADO.NET访问数据库 作者:不详  -------------------------------------------------------------------------------- ADO.NET访问数据库的步骤不论从语法来看,还是从风格和设计目标来看,ADO.NET都和ADO有显著的不同.在ASP中通过ADO访问数据库,一般要通过以下四个步骤:1. 创建一个到数据库的链路,即ADO.Connection:2. 查询一个数据集合,即执行SQL,

ADO.NET 访问 Sql Server2008(一)

           ADO.NET 是微软的 .NET  FrameWork中所包含的一组类 ,可以提供应用程序与数据库进行 通信  .         在以前的 数据库访问技术中,对于数据库的操作必须是在有连接的环境中,应用程序需要和数据源保持持续的链接  ,伸缩性和可扩展性比较差,占用资源也是比较多的 . 但是在ADO.NET中解决了这个问题  ,保证我们在  无连接的环境下也可以进行数据库的操作 .       原理是这样:用户可以将数据源的子集下载到本地中,然后对本地的数据子集进行 操

ADO.NET访问数据库的步骤

ado|访问|数据|数据库 不论从语法来看,还是从风格和设计目标来看,ADO.NET都和ADO有显著的不同.在ASP中通过ADO访问数据库,一般要通过以下四个步骤: 1.创建一个到数据库的链路,即ADO.Connection: 2.查询一个数据集合,即执行SQL,产生一个Recordset: 3.对数据集合进行需要的操作: 4.关闭数据链路. 在ADO.NET里,这些步骤有很大的变化.ADO.NET的最重要概念之一是DataSet.DataSet是不依赖于数据库的独立数据集合.所谓独立,就是:即

HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)

1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息.   但是cookie有下面几个问题: a:大小:cookies的大小被限制在4KB b:带宽:cookies随HTTP事务一起被发送,因此会浪费一部分发送的cookies时使用的带宽. c:复杂性:要正确的操纵cookies是很困难的.   Web Storage分为两种: <1>sessionStorag

java-把常用高频访问数据从数据库加载到内存,数据库的变化能够自动实时更新内存。求大侠给思路

问题描述 把常用高频访问数据从数据库加载到内存,数据库的变化能够自动实时更新内存.求大侠给思路 把常用高频访问数据从数据库加载到内存,数据库的变化能够自动实时更新内存. 解决方案 其实数据库内部本身已经有这样的缓存机制,操作系统也有.你再做其实经常会弄巧成拙. 你知道"高频"数据的淘汰算法是什么么?这一点估计你写不过主流的数据库,那别的都是白扯. 解决方案二: 大型数据库本身带有很好的缓存机制,不需要咱们进行任何干预 解决方案三: 数据库更新的时候,把数据送到内存刷新换一下.

使用ADO.NET访问Oracle 9i存储过程(上)

本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程(称为 SQL 编程块)和函数(返回单个值的编程块). 您可以使用以下托管数据提供程序连接到 Oracle 数据库:Microsoft .NET Oracle 提供程序.OLE DB .NET 提供程序.ODBC .NET 数据提供程序以及 Oracle 的 ODP.NET 提供程序.本文使用用于 Oracle 的 Microsoft?.NET 框架数据提供程序.使用 Oracle ODP.NET 数据提供程序或用于 OLE DB