一、ExecuteNonQuery() 执行非查询语句。
insert update delete 三种基本语句,返回的是数据库,受影响行数。
在insert中,如果有输出insered.id ,会返回一个结果集,这个结果集只包含一行一列,这一行一列,就是刚才新增的id。
二、什么是结果集:sql语句被发送到数据库引擎,执行之后的一个结果的集合。
三、ExecuteScalar() 取得结果集的首行,首列的值,
因为,这一列的类型不确定,所以返回的是object类型,需要我们自己转换类型,因为我们写sql语句的时候,就能确定,将要返回的结果集的首行首列是什么类型的了,如果返回的结果集一行一列都木有,那么这个方法就返回null(C#)。
四、ExecuteReader() 执行查询,返回一个读取器这个读取器指向结果集,结果集是在服务器内存中的。
五、DataReader,内部的指针默认是指向结果集的第一行的前面的,只有我们调用了DataReader.Read() 这样,会到服务器去拿一行数据,才会向前移动一次指针。
DaTaReader.HasRows这个属性,是表示当前读取器指向的服务器结果集是否有任何一行数据,只要有数据,不管有多少行,都返回true,一行都木有的,才返回false。
在Cmd.ExecutReader(),数据库查询完,就生成结果集,根据结果集返回读取器,这时候,读取器的HasRows属性就被赋值了
Read() 将指向数据库结果集的指针,向前进一个,并且返回这一行的数据,然后保存在dr中,这样我们就取到当前指向的这一行的数据
六、Try Catch 保证一个功能出错了,不会 影响另外的功能,出错的代码在try中,只会影响后面的几行。
七、注入漏洞:拼接出特殊的sql语句,造成数据库执行错误(和预期的执行结果不一致的结果),使用参数化查询可以避免
参数化查询:在交给Command对象的sql语句中,用一个@加上几个字符,组成的一个参数名字,如:@name
然后借助Parameter类,来创建参数对象,并且交给command对象,一起发送到数据库引擎执行
整个ADO包含两大部分:数据提供程序,和数据集
NonQuery :非查询,只要影响行数
Scalar :查询出来的数据,只要第一行第一列
Reader:查询出来的数据,全部都要(所有行,所有列),大数据量的
DataSet:查询出来的数据,全部都要(所有行,所有列),比较小数据量的,因为 DataSet是一次新吧所有查询出来的数据全部都搬回 本地内存中
原文:http://www.cnblogs.com/lisong-home/p/7748449.html