ADO.Net总结
ADO.NET简介
一、 ADO.NET的组成(ADO.NET是什么?能干什么)客户体验
ADO.NET就是一组类库可以让我们通过程序的方式访问数据库
ADO.NET主要包括5个对象,它们分别是Connection(数据库连接)对象、Command(数据库命令)对象、DataReader(数据库读取器)对象、DataAdapter(数据库适配器)对象和DataSet(数据集)对象。
数据提供程序(常用类)
Connection 用来连接数据库 Command 用来执行SQL语句
DataReader只读、只进的结果集,一条一条读取数据(StreamReader、XmlReader微软的类库中这些Reader的使用方式都差不多)
DataAdapter 一个封装了上面3个对象的对象。
数据集(DataSet),临时数据库 断开式数据操作
二、ADO.NET对象
ADO.NET中的Connection对象用于连接数据库,Command对象用于执行查询、增加、删除、修改等数据库操作命令,DataReader对象通过Command对象检索数据库查询返回的记录,DataAdapter对象可以通过DataSet数据集对象进行数据库操作。
三、Command类的常用方法
ExecuteNonQuery 执行删除、更新、插入等操作,返回一个int类型的值,即语句执行后在数据库中所影响的行数对于其他语句返回-1
ExecuteReader 返回类型是SqlDateReader (查询一行一行的读取)
ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一列,忽略其他列或行执行查询,返回结果集中第一行的第一列或空引用(如果结果集为空)返回是object类型
ExecuteXmlReader()用于XML操作,返回一个XmlReader对象,由于系统默认没有引用 System.Xml名空间,因此在使用前必须前引入
使用using语句即使释放连接资源,不用再考虑是否关闭连接,推荐使用
四、(ADO.NET连接池)
1.第一次打开连接会创建一个连接对象。
2.当这个连接关闭时(调用Close()方法时)会将当前那个连接对象放入池中。
3.下一个连接对象,如果连接字符串与池中现有连接对象的连接字符串完全一致,则会使用池中的现有连接,而不会重新创建一个。
4.只有对象调用Close(),的时候才会放入池中,如果一个连接对象一直在使用,则下次再创建一个连接对象发现池中没有,也会再创建一个新连接对象。
在池中的连接对象,如果过一段时间没有被访问则自动销毁。
五、SQL注入漏洞攻击
防范注入漏洞攻击的方法:不使用SQL语句拼接,通过参数赋值
构造恶意的Password:hello' or 1=1 --
参数在SQLServer内部不是简单的字符串替换,SQLServer直接用添加的值进行数据比较,因此不会有注入漏洞攻击。(带参数的sql语句内部是调用了存储过程)
案例(省市联动)+配置文件
注意事项:在app.config配置文件中写连接字符串的时候不需要要加转义符。例如:Data Source=.\SQLEXPRESS 即可,不需要写成Data Source=.\\EXPRESS
六、DataSet(ado.net断开式数据访问)
DataSet是什么?数据的集合、临时数据库、内存数据库。(B/S程序与C/S程序对DataSet的不同处理方式)
SqlDataReader为速度而生,只读、只进,功能有限。ADO.Net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取
SqlDataAdapter是DataSet和数据库之间沟通的桥梁。数据集DataSet包含若干表DataTable,DataTable包含若干行DataRow。foreach (DataRow row in dataset.Tables[0].Rows) row["Name"]。
通过DataAdapter的Fill方法填充DataSet中的表。
创建DataAdapter的时候,只需指定连接字符串和查询语句,会自动生成SelectCommand.
通过SqlCommandBuilder自动创建InsertCommand、DeleteCommand、UpdateCommand,然后就可以调用adapter的Update()方法将DataTable中的数据更新到数据库中。
通过SqlCommandBuilder来创建Command对象的时候,必须保证在创建adapter的时候的select语句中包含对主键的查询
也可以自己指定Command,我们对DataTable的操作,只是为Rows集合中没行的RowState状态做了标记,并没有将该行从Rows集合中真的删除
七、 SQLHelper
封装一个SQLHelper类方便使用,提供
ExecuteDataTable(string sql,params SqlParemeter[] param)
ExecuteNonQuery(string sql,parms Sqlparameter[] param)
ExecuteScalar(string sql,parms Sqlparameter[] param)
ExecuteReader(string sql,params SqlParameter[] param)
ExecuteList<MyT>()返回List集合(更高一层次的封装)泛型
sqlconnection在程序中一直保持它open可以吗?对于数据库来说,连接是非常宝贵的资源,一定要用完了就close、dispose。【Close以后就可以放到“池”中了,其他链接就可以再次使用了。】
注意事项:通过执行ExecuteReader()方法获取输出参数的时候需要将reader.Close()以后才能获取。
在封装返回SqlDataReader的方法中关于Connection的关闭、异常与资源释放问题:当使用using时可以不加try-catch,但是在返回SqlDataReader的方法中没有使用using,所以这时应该增加一个try-catch,防止发生异常后无法关闭连接对象。
ADO.Net总结的更多相关文章
- ADO.NET对象的详解
1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...
- WebForm获取GET或者POST参数到实体的转换,ADO.NET数据集自动转换实体
最近在修改维护以前的webform项目(维护别人开发的.....)整个aspx没有用到任何的控件,这个我也比较喜欢不用控件所以在提交信息的时候需要自己手动的去Request.QueryString[] ...
- ADO.NET编程之美----数据访问方式(面向连接与面向无连接)
最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...
- ADO.NET一小记-select top 参数问题
异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 最近使用ADO.NET的时候,发现select top @count xxxx 不 ...
- .NET基础拾遗(6)ADO.NET与数据库开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- 升讯威ADO.NET增强组件(源码):送给喜欢原生ADO.NET的你
目前我们所接触到的许多项目开发,大多数都应用了 ORM 技术来实现与数据库的交互,ORM 虽然有诸多好处,但是在实际工作中,特别是在大型项目开发中,容易发现 ORM 存在一些缺点,在复杂场景下,反而容 ...
- ADO.NET Entity Framework 在哪些场景下使用?
在知乎回答了下,顺手转回来. Enity Framework已经是.NET下最主要的ORM了.而ORM从一个Mapping的概念开始,到现在已经得到了一定的升华,特别是EF等对ORM框架面向对象能力的 ...
- ADO.NET 核心对象简介
ADO.NET是.NET中一组用于和数据源进行交互的面向对象类库,提供了数据访问的高层接口. ADO.NOT类库在System.Data命名空间内,根据我们访问的不同数据库选择命名空间,System. ...
- ODBC、OLE DB、 ADO的区别
转自:http://blog.csdn.net/yinjingjing198808/article/details/7665577 一.ODBC ODBC的由来 1992年Microsoft和Syba ...
- LINQ to SQL语句(19)之ADO.NET与LINQ to SQL
它基于由 ADO.NET 提供程序模型提供的服务.因此,我们可以将 LINQ to SQL 代码与现有的 ADO.Net 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to S ...
随机推荐
- SQL从入门到基础 - 05 数据分组、Having语句
一.数据分组 1. 按照年龄进行分组统计各个年龄段的人数: Select FAge,count(*) from T_Employee group by FAge; 2. Group by子句必须放到w ...
- 基于live555的一个简单RTSP服务器
1,编译live555源码目录下的 BasicUsageEnvironment.groupsock.liveMedia.UsageEnvironment四个工程生成相应的库文件: 目录结构如下: 2, ...
- 你好,C++(6)2.3 C++兵器谱
2.3 C++兵器谱 正所谓“工欲善其事,必先利其器”,而要想做好C++程序设计,自然也离不开几件像样的兵器.下面我们就来看看C++兵器谱上有哪些神兵利器值得我们学习掌握.排在兵器谱上首要位置的就是 ...
- lib,dll区别 及 VS中如何添加lib,dll
1.加载lib/头文件 分两种方法: (1)适用于当前项目 第一步:项目->属性->C/C++->常规->附加包含目录(浏览.h文件的路径) 添加包含文件 第二步:项目-> ...
- bestcoder r44 p3 hdu 5270 ZYB loves Xor II
这是昨晚队友跟我说的题,不知道当时是什么玄幻的事件发生了,,我看成了两两相乘的XOR 纠结了好长时间间 不知道该怎么办 今天早上看了下这道题,发现是两两相加的XOR 然后就想了想昨晚的思路 发现可做 ...
- 小巧实用的数字加减插件(jquery插件)
2015-12-04 近期项目需要,我将插件更新了,增加了两个参数,一个参数控制文本框是否支持输入,另一个参数则是新增了一个回调函数,返回文本框内的值.另外对代码局部重构了,优化了一下封装,需要的朋友 ...
- C#邮件发送(最坑爹的邮箱-QQ邮箱)---转发(SmallFlyElephant)
C#邮件发送(最坑爹的邮箱-QQ邮箱) 最近工作挺清闲的,有空的时候陪妹子出去玩玩,自己看看小说,看看电影,日子过的挺欢乐的,这个星期幡然悔悟,代码才是我的最爱,做点小东西,就写个邮件发送程序.说的邮 ...
- smarty 基本介绍及示例
什么是smarty? Smarty是一个使用PHP写出来的模板引擎,是业界最著名的PHP模板引擎之一.Smarty分离了逻辑代码和外在的内容,提供一种易于管理和使用的方法,用来将原本与HTML代码混杂 ...
- CREATE DATABASE
CREATE DATABASE IF NOT EXISTS `focusdata` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;USE `fo ...
- ubuntu -server 忘记root 密码方法
允许 su 到 root 非常简单,只需要重新设置下密码即可.下面是设置的方法: 1 me@ubuntu:~$ sudo passwd 2 密码:<--- 输入安装时那个用户的密码3 输入新的 ...