`
txf2004
  • 浏览: 6855193 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    ADO.NET 2.0技术内幕(高清 中文 带书签 全)

    本书介绍了如何用ADO.NET 2.0对独立应用、企业级应用和Web应用程序中的数据进行访问、排序和操作。作者针对如何利用Visual Studio 2005中的新工具和向导,编写、测试并调试数据库应用程序代码,用丰富的示例代码、...

    北京中科信软 Visual Basic.NET培训

    三 ADO.NET 数据库连接与连接池控制 执行数据操作命令 DataReader DataSet ADO.NET中的数据更新 多活动结果集 批量复制 ADO.NET中的异步处理 事务处理机制 LINQ 案例分析:采用N层架构和分布式的大型图书...

    亮剑.NET深入体验与实战精要2

    此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的宝贵成果和盘托出,力求将编程思想与具体实践融为一体,提炼出适合于广大读者快速理解和彻底掌握.NET软件开发的最佳学习...

    零基础学ASP.NET 2.0电子书&源代码绝对完整版1

    示例描述:本章演示ASP.NET 2.0网站的预编译以及学习ASP.NET 2.0的前置知识。 WebSite文件夹 创建的ASP.NET 2.0 Web站点。 www文件夹 第一个用C#开发的Web应用程序。 bianyi.bat 编译网站的批处理文件。 ...

    亮剑.NET深入体验与实战精要3

    此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的宝贵成果和盘托出,力求将编程思想与具体实践融为一体,提炼出适合于广大读者快速理解和彻底掌握.NET软件开发的最佳学习...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    10.4.6 dataset和datatable对象的高级ado.net特性 418 10.5 使用通用提供程序模型 420 10.6 ado.net中的连接池 422 10.7 transactions类和system.transactions名称空间 423 10.7.1 创建事务 423 10.7.2 ...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    8.4.4 在数据访问类里使用DataSet 8.4.5 数据绑定 8.5 DataView类 8.5.1 使用DataView排序 8.5.2 使用DataView过滤 8.5.3 使用关系的高级过滤 8.5.4 计算列 8.6 总结 第9章 数据绑定 9.1 基本的...

    asp.net技术内幕(2)

    13.6 使用强类型的DataSet 13.7 小结 <br>第14章 使用ADO.NET创建搜索页面 <br>14.1 使用SQL Server全文搜索 14.1.1 配置Full-Text Search Service 14.1.2 对数据库数据执行任意文本查询 ...

    ASP.NET4高级程序设计(第4版) 3/3

    8.4.4 在数据访问类里使用DataSet 257 8.4.5 数据绑定 258 8.5 DataView类 259 8.5.1 使用DataView排序 259 8.5.2 使用DataView过滤 261 8.5.3 使用关系的高级过滤 262 8.5.4 计算列 263 8.6 总结 ...

    asp.net技术内幕(1)

    13.6 使用强类型的DataSet 13.7 小结 <br>第14章 使用ADO.NET创建搜索页面 <br>14.1 使用SQL Server全文搜索 14.1.1 配置Full-Text Search Service 14.1.2 对数据库数据执行任意文本查询 ...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    2.ASP.NET.2.0.高级编程(第4版) [1/7] 原书名: Professional ASP.NET 2.0 原出版社: Wrox 作者:(美)Bill Evjen, Scott Hanselman, Farhan Muhammad [同作者作品] [作译者介绍] 译者: 李敏波[同译者作品] ...

    spring.net中文手册在线版

    使用ADO.NET进行数据访问 17.1.简介 17.2.动机 17.3.Provider抽象 17.3.1.创建IDbProvider类型的实例 17.4.命名空间 17.5.数据访问的方式 17.6.AdoTemplate简介 17.6.1.执行回调 17.6.2.在.NET 2.0中执行回调 ...

    ASP.net技术内幕

    内容包括:ASP.NET Web表单的使用,高级ASP.NET页面的开发,ADO.NET的使用,ASP.NET应用程序的使用, ASP.NET应用程序的保护,ASP.NET Web服务的建立,.NET框架的利用,自定义的ASP.NET控件的建立,ASP.NET的应用...

    asp.net面试题

    五、下列ASP.NET语句( )正确地创建了一个与SQL Server数据库的连接。 A.SqlConnection con1 = new Connection(“Data Source = localhost; Trusted_Connection =Yes; Initial Catalog = myDB”); B.SqlConnection ...

    asp.net技术内幕(5)

    13.6 使用强类型的DataSet 13.7 小结 <br>第14章 使用ADO.NET创建搜索页面 <br>14.1 使用SQL Server全文搜索 14.1.1 配置Full-Text Search Service 14.1.2 对数据库数据执行任意文本查询 ...

    asp.net技术内幕(4)

    13.6 使用强类型的DataSet 13.7 小结 <br>第14章 使用ADO.NET创建搜索页面 <br>14.1 使用SQL Server全文搜索 14.1.1 配置Full-Text Search Service 14.1.2 对数据库数据执行任意文本查询 ...

Global site tag (gtag.js) - Google Analytics