[空白音频] 嗨,你好。
下面我们一起来学习呢 就是数据库里面的两种访问方法
我们前面提到呢就是 ADO.NET 里面有很多的类,但是我们访问数据
呢它有两种基本方式,第一种呢就是 DataAdapter
和 DataSet 它实际上呢是通过这个 Adapter
呢把那个,将那个数据库啊 跟我们的内存里面的数据集联系起来,所以通过这样一个适配器
那么这种方式呢适合于离线处理,所谓的离线处理呢,指的是就是说我数据库 里面的数据,我都把它抽取到这个
DataSet 里面来了,在内存里面做各种各样的操作 就是这个也叫,但这个离线呢不是说断网的意思,指的是
这个数据库呢抽取出来了,那在这里面呢它有一个功能可以
自动建立这个命令对象,因为我们知道,命令呢它最终呢是 跟这个数据库打交道的,那么这个 Adapter
里面呢它可以自动建立这些 对象,从而使得这个数据库跟内存里
之间的那个数据能够关联起来,那么第二种方式呢就是使用 DataReader
,这个 Reader 呢它主要是读数据,它不是把所有的数据呢 一下读到那个 DataSet
里,它是放到 Reader 里头呢 只读数据,这种方式呢读的话,它只能向前读,也就是说
读过了以后呢,前面的数据就不管了,它适合于这种需要效率比较高的那种场合 这两种方式,它都需要
Connection 和 Command 因为这个 Connection
呢表示跟数据库的关联 Command 呢是真正呢执行这些数据的
抽取数据的查询以及呢数据的更新等等,那下面我们看看 Connection
对象 这个连接对象呢它跟数据库直接打交道的,表示呢,跟数据
库的直接的一个连接,对于不同的数据库或者我们叫不同的数据 库的
Provider ,也就是数据提供者,它有不同的 Connection 对象
比如说跟 SqlServer 连的,那它就在 SqlClient 这个名称空间下面的
SqlConnection,那其它的 Provider 呢,也有其它的,我们前面已经提到过 那所有的
Connection 呢它里面都有 Open 方法,就是跟那个数据库呢打开
因为呢它也有一个很重要的叫做连接串,ConnectionString 这个属性,连
我们也把它叫做连接字符串,使用方法呢它是这个样子的 using
这个名称空间,然后呢,要把这个连接的 信息呢,都写到一个字符串里头,我们称为呢连接串
这个连接串呢这里面跟 SqlServer 连接的呢,它的写法呢是这个样子的
你看,一个是跟哪个服务器连,这后面跟那个服务器的名字或者 ip
地址,如果是本机呢 就可以写 localhost,也可以写个点,单独一个点就表示本机,然后呢
跟这个服务器上的哪个数据库,所以写个 database 等于数据库的 名字。
然后 uid ,user id,一个是用户名,pwd 密码,把这几个信息呢都写到一个字符串里头
那么它就能表示呢跟哪个服务器上的哪个数据库,用哪个账号去跟它连接 那么这个连接呢可以
new 一个 Connection,用那个连接串做参数,这样的话就又可以建立连接
然后连接完了以后呢我们就可以 open
打开它 那这里这个连接串呢,针对不同的数据库的连接串
它是写法呢是有所差别的 那么我们看,跟 Sql Server
连接呢,除了刚才那种写法以外 数据源,data source,那也就是我们刚才的
Server 数据库的那个服务器的名字,然后呢用 initial
catalog 就是 初始连接的这个数据,数据库,这个就我们也可以写成
data base 等于,user id 也可以写成 uid=,password
也可以写成 pwd= 所以一方面这个写法呢它是有规矩的,包括大小写是区分的
另一方面有的时候它又有不同的写法,所以我们掌握一种就可以了 那么对于早期的
Access 这种桌面型数据库,或者 Excel 文件,注意这个 Excel
文件呢 每一张表也可以看成一个,因为它也是一个二维表嘛
也可以看成数据库,所以,那么就可以使用 Jet.OLEDB4.0
这样这样的写法 在这里会放到网上,这个具体的写法
还有一个就是连接新版本的 accdb
那微软呢它经常更新那软件呢,所以像那个新的 Access
数据库呢 accdb 文件 那你用刚才那种方式呢就不行了,就要用
Microsoft.ACE.OLEDB.12.0,你看这个版本跨度也很大呀 然后这个写法也不同了,叫
ACE,所以呢我们在写的时候一定要注意 同样的,这个有个
Provider 然后 Data Dource,也就是相当于数据库了,然后这里写
什么样的文件等等,比如说 Excel 文件 就可以这样写。
注意了,这里要写绝对的路径,当然也可以用程序把那绝对路径求出来 等等吧。
另外比如说要连接 Oracle ,有 oracle 的写法,连接 Mysql 呢 有
Mysql 写法,那么数据库连接完了以后呢,下面就是要 Command
对象 那个 Command 对象呢是一个基本对象,它里面有几个重要的方法
一个是 ExecuteReader,执行一个 Reader,得到是一个 Reader 对象
它就是单向的只读,这样一个对象,就可以把数据库里面的数据呢 访问到,简单的有
ExecuteScalar,Scalar 呢是标量,也就是单一的量
那么一般用于呢求和呀,求平均值、 求个数等等这种聚合函数的一个结果
因为它这个结果呢就是单一的一个量,一般都是整数啊,实数啊等等,等于一个量 就可以用这个方法。
如果是更一般的那就是 ExecuteNonquery ,执行
非查询的命令,非查询性的命令,主要是 Updata,也就是更新数据 Delete
删除数据,Insert 插入数据,这个函数返回的是影响
的记录条数,影响了多少条记录,比如说你 Delete 删除了多少行
它返回的是一个记录数,这是这几个重要的方法 在使用这个
Command 的时候我们有一个细节啊,就是 经常需要加一些参数,比如说你插入的时候,那插入了
具体这些变量,我们可以就把它称为参数 那么在 SqlServer 里面,在
Sql 语句里头啊 它这个参数是用个圈圈, @ 来表示的,那么这个
@ 这个参数 也就是说,这个参数的具体的值呢,就可以用这个 Parameters.Add
加一个参数,这个参数,比如说参数的 叫 CName
,然后它参数的类型以及呢宽度,这个参数 .Value
等于,就把那个 值呢就代替到这里头,当然我们也可以呢直接
写那个 Sql,拼 Sql 语句字符串, 我们经常叫拼 因为 insert
into 然后这是 Sql 语句,Values ,然后注意这个单引号啊,单引号表示
Sql 语句里面的那个字符串,那么这个单引号后面呢要拼字符串呢
那就要加一个这个变量啊,然后呢再一个引号 引起来又是一个单引号,一个圆括号,那这种拼字符串
它跟我们使用参数有什么差别呢?就是 它们最终呢都是形成了
Sql 语句,但是呢使用字符串这种拼接呢容易
一个是容易拼错,啊另外一个呢,比如说有的那个字符串它,有个那个数据啊
它是二进制数据它不能用字符串表示,所以你用,只能用这个 Parameters
,还有一个更重要的原因 叫做更加安全,因为拼字符串呢,就有人恶意在这个变量里头
写一些恶意的字符串,那么使得我们这个 Sql 语句呢就可能
不是我们原先想要的那个结果了,这个呢就计算机里面称为 Sql
注入 也就是说,它的这个语句里面注入一个他想要的东西
那么使得,它甚至呢把我们数据库里面的数据都可以删除,做一些就是这个语句,这种
拼的方式,它就会这个带来安全隐患。
当然我们在 一般的呢,简单的这个例子里呢,我们就拼这个字符串了