胡乱理解ADO.NET(四)

在上两篇文章中,对于dataset做了个简单的探讨.很多次提到,可以把dataset看作是内存中的数据库.既然是数据库,那么首要任务就是存储数据用的.而之前,我所举的的例子都是手工往dataset里添加数据,其实这个并不是我们最想要的.我们最想要的是能用程序把数据库里的数据读取出来然后装到dataset里,然后用程序来处理dataset里的数据.当处理好dataset里的数据后,我们还想把这些数据再更新到数据库中. 这样就能与数据库断开连接而处理数据了(把数据库中的数据读取出来并装到dataset里就可以断开程序与数据库的连接了,此时可以对dataset里数据处理).

那么要实现上面所说的,就有一个关键的问题.我们知道程序可以与数据库连接并读取数据,但是把这些读取到的数据怎么装到dataset里呢?用前面的知识,我们知道可以用SqlDataAdapter里的read()方法,读一行,然后在把每行的数据按字段名取出来,一个一个的添加到dataset里的datatable中.这个过程要求datatable先创建列,然后再一行一行往里添加SqlDataAdapter.read()方法读取的数据.这样也可以把数据里的数据添加到dataset里,但是本质还是手工往dataset中的datatable里添加数据.(手工添加,就是用代码在datatable里创建列,再加行的意思).要是都是这样来把数据库里的数据装到dataset中是不是太麻烦了!现在我们就想一下把数据库里的很多记录甚至一张表里的数据,一下装到datatable里,不要一行一行的手工添加进去,这样又方便又高效.为了满足这样一个愿望,SqlDataAdapter类就引出来了.

SqlDataAdapter类,可以把数据库里的数据读出来,然后把这些数据一下就装到了dataset中.而且还可以把dataset里的数据一下又装到数据库里(或更新到数据里).那么SqlDataAdapter类是不是就相当于dataset与数据库只之间的桥梁? 像这样:dataset------SqlDataAdapter-------数据库

SqlDataAdater如何将数据装到dataset里呢?它有个重要的方法叫:SqlDataAdater.Fill(...).调用这个方法的时候就可以把数据填充到dataset里的,这个方法的参数,看一下文档就知道了.可以直接填到一个datatable里如:Fill(datatable)也可以这样Fill(dataset).等等.不管怎么样,数据最终是存在datatable里的.SqlDataAdater怎么从数据库里得到数据呢?第一篇文章讲了程序如何与数据库操作,说到一个类叫:SqlCommand,它就是负责传递命令给数据库的.要想得到数据库的数据肯定也要用这个传递命令,而且上传递一个查询的命令.然后SqlDataAdater可以支配这个SqlCommand.当数据库得到SqlCommand传来的命令后执行查询命令,并返回查询的数据.SqlDataAdater此时就可以把这些数据库返回的数据填充到了datatable里了.

看一段代码,以sql2000中Northwind数据库为例.

Code1

1   static DataSet ds;
2   protected void Page_Load(object sender, EventArgs e)
3   {
4     if (!Page.IsPostBack)
5     {
6       bindGridView();
7     }
8   }
9   public void bindGridView()
10   {
11     string strSql = "select employeeid,firstname,city,country from Employees";
12     SqlConnection cn = new SqlConnection();
13     cn.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
14
15     ds = new DataSet();
16
17     SqlCommand cmd = new SqlCommand(strSql, cn);
18
19     SqlDataAdapter da = new SqlDataAdapter();
20
21     //SelectCommand表示是SqlCommand传送给数据库的是查询语句
22     da.SelectCommand = cmd;
23
24     //开始发送命令(SqlCommand)给数据库,把返回的数据填充到dataset里的表名叫table1的datatable里
25     da.Fill(ds, "table1");
26
27     //上面已经把ds里的table1填充上数据了,所以可以绑定到table1
28     GridView1.DataSource = ds.Tables["table1"].DefaultView;
29     GridView1.DataBind();
30
31   }
32

时间: 2025-01-26 18:19:17

胡乱理解ADO.NET(四)的相关文章

胡乱理解ADO.NET(一)

严重注意:下述内容可能完全错误,我只是乱理解一翻便于自己记忆.不能作为任何网友的参考,那便是严重误人子弟了! 希望有懂的人看到后能告诉我真正的原理.谢谢! 对数据库的操作貌似是程序员必须要掌握的知识,也是绝大部分的项目中要用到的知识.在.net框架下程序与数据库之间的互操作称为:ADO.NET. 也做过一些项目,对于程序与数据库的操作,也会用.不明白的地方上网搜一下,查查资料,再把高手写的代码照复制下来照葫芦画瓢是了.这样也满足了一般项目的开发.但是一段时间不用后,又忘了,再去看看代码是怎么搞的

胡乱理解ADO.NET(三)

上一篇我们讲了dataset的内部构成和如何往里面填充数据.当一个dataset被填充上数据后我们就可以用个数据绑定控件来绑定到dataset里的datatable了,然后就可以显示出里面的数据了.比如:GridView1.DataSource = ds.Tables[0].DefaultView,这样数据被显示出来了.很奇怪ds.Tables[0].DefaultView怎么多个DefaultView这玩意.有什么作用?我们把它去掉直接用ds.Tables[0]发现也可以.那这个东西有什么用?

胡乱理解ADO.NET(二)

在上篇文章中说了程序对数据库的操作后,我们通常要返回操作信息.例如:返回受影响的行数或者返回查询的数据.SqlDataReader可以对返回的数据进行操作,但只是只读的,而且必须要保持连接才行.那么能不能更灵活的对返回的数据操作呢?答案是肯定的. 既然我要对返回的数据进行灵活的操作,那么我们是不是要搞个东西来存放这些数据.要不然程序得到数据库里的数据后放哪?我们用什么来存放这些数据呢?有个类叫做dataset官方的解释叫做:表示数据在内存中的缓存.看这个解释多少对我来说多少有点茫然.我个人把它通

ASP.NET趣味理解-ADO.NET对象模型

数据库的应用在我们的生活和工作中已经无处不在,无论是一个小企业的OA系统,还是中国移动的运营系统,似乎都离不开数据库的应用.对于大多数应用程序来说,不管它们是Windows桌面应用程序,还是Web应用程序,存储和检索数据都是其核心功能.所以针对数据库的开发已经成为软件开发的一种必备技能.如果说过去是"学好数理化,走遍天下都不怕",那么,对于今天的软件开发者而言就是"学好数据库,走到哪儿都不怵!". ADO.NET是微软新一代.NET数据库的访问架构,ADO是Acti

深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.     在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT OUTER JOIN     左向外联接的结果集包括  LEF

magento 开发 -- 深入理解Magento第四章 – 模型和ORM基础

第四章 – 模型和ORM基础 对于任何一个MVC架构,模型(Model)层的实现都是占据了很大一部分.对于Magento来说,模型占据了一个更加重要的位置,因为它常常包含了一部分商业逻辑代码(可以说它对,也可以说它错).这些代码在其他的MVC框架中往往出现在控制器或者帮助函数中. 传统的PHP MVC架构中的模型 本来MVC的定义就不是很清晰,不同的人有不同的看法,而对于模型的定义争议就更多了.在MVC模式被广泛采用之前,PHP程序员往往通过SQL语句直接操作数据库.也有些程序员通过一个SQL抽

深入理解Mysql的四种隔离级别_Mysql

一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交.如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作. 二.事务的 ACID 事务具有四个特征:原子性( Atomicity ).一致性( Consistency ).隔离性( Isolation )和持续性( Dura

WebComputing━ADO总结报告4

ado|web 四.Command对象: 从英语字面的意思就可以看出,Command是用来做命令执行和参数传递的.而Command对象的批量参数传递,StoredProcude执行等等灵活而强大的功能也是它受到青睐的原因.Command对象主要是向SQL语句.StoredProcude传递参数,依靠SQL Server的强大功能来完成数据库的操作:而RecordSet对象可以说是微软从新封装了数据对象,并提供了一系列的方法和属性来简化数据库的编程.我们看下面的一个例子,它用了两种不同的方法实现了

对三层构架的再理解

问题描述 三层结构中是不是不应该在UI和BLL中出现sql语句?1.如果在UI中有条件查询,怎么避免在BLL中出现拼sql语句的情况?2.如果要使用事务操作多个dal方法,怎么避免对dal修改? 解决方案 解决方案二:绝对不应该在BLLUI中出现sql所以你第一个问题是不存在的,BLL只负责定义条件查询的函数.而且是静态的.BLL调用DAL的函数.之后拼sql是DAL的事.第二个问题其实不管DAL的事,是数据库处于并发数据的问题.解决方案三:有时间"再理解",不如花点时间"理