注册 登录
编程论坛 C# 论坛

C#.NET中存取数据库入门贴(ADO.NET)

师妃暄 发布于 2008-07-28 10:42, 18314 次点击
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 https://www.bccn.net
*/ 作者: 师妃暄 E-mail:shifeixuan@ QQ:591608560
*/ 时间: 2008-7-28 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

首先想告诉大家的是确实是.NET知识体系中的重中之重。因为微软.NET平台最适合的就是做管理系统(尤其是ERP),这些系统核心思想就是收集,处理,保存数据。这必定要依靠与数据库进行交互。

经常见到坛子里新手们对如何操作数据库感到比较困惑,这是很正常的。这里我分享下我的一些经验和知识,企图用最直白最直接的描述让大家了解如何存取数据库。希望以后大家见到此贴能助一臂之力。

也许刚接触.NET的朋友会问:与C#.NET或者到底是什么关系。在我看来,他们是一个整体。当我们用C#.NET写一程序时,这个程序可能涉及到界面的创建,数据的存取,业务的逻辑等等。我们就把其中连接数据库,执行SQL语句,获得数据集,再逐条获得数据,再关闭数据库的一段过程单独拿出来给个名称叫做

中连接数据库有两种方式,一种是要持续保持连接的。另一种是不需要持续保持连接的。

我们先来看第一种方式:为什么说是要持续保持连接的呢?就是说从打开数据库到关闭数据库这整个过程,都必须是程序与后端的数据库保持着连接。最明显的特征就是用到了XXXDataReader这个对象来访问数据。
来看一个简单的例子(MS SQLServer):用到别忘来在文件中引用命名空间using System.Data.SqlClient;

程序代码:
string  ConnectionString = "server=.;database=pubs;user=sa;pwd="; //这是获得连接数据库的字符串,不用过多解释了吧- -!
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();                                                      //创建连接数据库的对象并且打开数据库

string  sqlstr= "SELECT * FROM authors";

SqlCommand cmd = new SqlCommand(sqlstr,conn);                     //创建执行SQL语句的对象.注意两个参数
= CommandType.Text;                               //指定SQL命令的类型。如果是存储过程的话,这里写CommandType.StoredProcedure;
                             
SqlDataReader reader = cmd.ExecuteReader();                       //创建有持续连接的读取数据的对象,并接收执行命令。
while (reader.Read())
{
     //每reader.Read()一下,就读取了一行数据,可以对这行数据进行操作了
}
conn.Close();                                                     //关闭数据库连接


现在如果感觉有点蒙,别急,听我慢慢解析。让我们再来看看第二种连接方式。这种方式是当我们执行完了SQL命令后,肯定会返回数据集的对吧?(当然是指SELECT命令),这个时候要在本地创建一个数据接收对象,这个对象是在内存中的。一次性接受完毕后,关闭数据库连接。这时我们只需要对本地数据集进行操作就可以了。与后台真正的数据库没有任何关系了。有人会问,这个东东到底是个啥玩意?这就是传说中的DataSet。它是多张数据表的集合,也就是说当我们用SqlCommand命令执行完毕后,数据集如果是一张表,DataSet接收后就是一张表,如果是多张表,DataSet中就会有多张表。只不过是用DataSet[0].DataSet[1]这样来取就可以了。我们来看一个例子:
程序代码:
string  ConnectionString = "server=.;database=pubs;user=sa;pwd="; //这是获得连接数据库的字符串,不用过多解释了吧- -!
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();                                                      //创建连接数据库的对象并且打开数据库

string  sqlstr= "SELECT * FROM authors";

SqlCommand cmd = new SqlCommand(sqlstr,conn);                     //创建执行SQL语句的对象.注意两个参数
= CommandType.Text;                               //指定SQL命令的类型。如果是存储过程的话,这里写CommandType.StoredProcedure;
                             
DataSet ds= new DataSet();                                        //创建无持续连接的读取数据的对象
SqlDataAdapter ada = new SqlDataAdapter();
ada.SelectCommand = cmd;
ada.Fill(ds);
conn.Close();                                                     //关闭数据库连接


//后面所有对数据库的操作都是在连接关闭的情况下进行的....

细心的读者会发现,怎么多出了三行,SqlDataAdapter是什么东东。这就是第二种连接方式最大的特征--数据适配器。简单的说,这个适配器就是后台数据库与本地内存中的DataSet连接的通道。我们可以把后台数据库想象成楼顶上的太阳能热水箱,本地内存的DataSet想象成家里浴室的喷头。喷头的水怎么来的啊?当然是靠管道从楼顶得到的嘛,这个SqlDataAdapter就充当着管道的角色,千万别把它想复杂了。ada.Fill(ds);就是把结果填充到本地的方法。

[[it] 本帖最后由 师妃暄 于 2008-7-28 22:01 编辑 [/it]]
72 回复
#52
keytolove2008-10-31 11:26
顶起来``
#53
yangchunsheng_02008-10-31 17:40
这个要顶呢
#54
HotPower2008-11-05 22:58
学习~~~
~~~~~~~~~~~~~~~~~~~~
#55
tinahongqin2008-11-07 10:21
谢谢了!
#56
小小菜刀2008-11-07 17:30
教程这东西 说明加完整代码,我们下载过来 可以直接调试下,也可以比较下 是否写对了。
#57
GoldenStarYuan2008-11-18 21:44
非常感谢楼主,太辛苦啦。
#58
anixilu2008-12-01 19:02
蒽!很好很详细呵呵 多谢了
#59
artietao2008-12-03 10:38
感谢楼主!!
#60
DragonWarrior2008-12-03 14:36
楼主辛苦了! 顶一个~~
#61
gyll2010-06-02 18:40
好东西啊
#62
xym28882010-06-12 22:36
学习了~
#63
xinyu57822011-03-01 09:44
顶顶
#64
小楼浪子2011-03-02 18:02
不错啊。。。找了好久都没有找到的啊~收下了!!!
#65
一池红鱼2011-03-03 08:28
谢谢楼主!!
#66
zhangjibo2011-03-06 22:20
我在北大青鸟学C#,有半年了,可以看清上面的代码,今天在百度上搜到了这个网站,就注册了,还真不错啊,呵呵!
#67
tr02172011-03-23 17:53
顶一个
#68
Timongis2011-03-26 20:47
lz做的很用心 很好很给力  谢谢了
#69
Alar302011-03-31 15:32
学习数据库了哈。。。
#70
luyf2011-06-20 02:22
唉 特意上来顶你帖~~ 多谢了啊~
#71
dengkeyu2011-06-26 23:57
留名,到时候慢慢看,慢慢学习...
#72
蒙语梦雨2015-06-16 19:18
楼主有的群么,刚学这个,好想找些大神学习
#73
mingjl2017-12-12 11:01
留名,到时候慢慢看,慢慢学习...
12