MSSQL ADO.NET
为什么要学ADO.NET
之前我们所学的只能在查询分析器里查看数据,操作数据,我们让普通用户去学sql,所以我们搭建了一个界面(Web/Winform) 让用户方面的操作数据库中的数据
什么是ADO.NET
ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类(操作文件),System.Data 这组类是用来操作数据库(不光是MSSQL Server),
它提供了统一的编程接口让操作其它数据库(Access、Oracle等)的方式和操作MSSQL Server一致。
ADO.NET组成,数据提供程序(常用类)
Connection,用来连接数据库
Command,用来执行SQL语句
DataReader只读、只进的结果集,一条一条读取数据(StreamReader、XmlReader微软的类库中这些Reader的使用方式都差不多)
DataAdapter,一个封装了上面3个对象的对象。
DataSet(数据集),临时数据库。断开式数据操作

ADO.NET中的其他常见类
ConnectionStringBuilder //自动生成连接字符串
Parameter //带参数的SQL语句
Transaction //在ADO.NET中使用事务
与DataSet相关的类:
DataView //视图类,DataTable中的数据以不同的视角查看
DataRowView //DataView中的行。
DataTable //DataSet中的数据表
DataRow //DataTable中的行
DataColumn //DataTable中的列
DataRealation //DataTable与DataTable的关系
Constraint //DataTable中建立的约束
Ado.net访问数据库的方式。
1.连接数据用Connection
2.执行SQL语句Command
3.执行完毕之后将结果一条一条返回。DataReader
使用DataAdapter+DataSet,这种方法本质还是通过Connection、Command、DataReader将数据全部取出来然后放到了DataSet中。//看DataAdapter的构造函数
Connection对象
如何让应用程序与数据库建立连接?Connection对象。
读取Sql Server数据库使用
1.创建SqlConnection对象
2.获取连接字符串
2.1. VS视图-服务器资源管理器-数据库连接上点右键-添加连接 在新添的数据库上点右键 属性 里有连接字符串
2.2. 使用SqlConnectionStringBuilder帮助获取连接字符串
2.3. 使用PropertyGrid控件的SelectedObject属性与SqlConnectionStringBuilder配合使用。
3.打开连接.(多次打开问题:ConnectionState枚举)
4.关闭连接 //相当于设置了路障
5.释放资源 //相当于把路拆了,这块地可以盖楼了。
Ps:调用Connection.Dispose()【继承自Component类的方法】方法时,内部调用了Close(),connection不能重复打开。
Command对象
操作Sql Server数据库使用SqlCommand对象,SqlCommand表示向服务器提交的一个命令(SQL语句等) , CommandText属性为要执行的SQL语句.
创建SqlCommand对象:
1.通过new关键字创建
2.通过IDbConnection.CreateCommand()方法创建(编写通用代码的时候使用(多态))
常用的方法
--ExecuteNonQuery() 方法除了执行增删改sql语句外,执行其他Sql语句返回的都是-1
--ExecuteScalar() 一般建议当执行的sql语句返回单个值得时候使用(单行/单列)
--ExecuteReader() 一般建议当执行sql语句返回多行多列的时候使用
--其实执行任何的sql语句使用以上的任意一个方法都可以。
--使用任何一个方法都会将我们指定的sql语句发送到服务器执行。只不过是不同的方法执行完毕sql语句后,给我们返回的结果不同而已。
--ExecuteScalar() 函数内部其实就是调用了ExecuteRead()方法,并且通过reader只读取第一行的第一列,然后作为一个object来返回,这样的话给我们感觉好像ExecuteScalar()是返回了一个object
StatementCompleted事件
每条SQL语句执行完毕之后触发。
多条语句同时执行(用分号隔开),如何获取每条语句所影响的行数?//实际返回值为每条语句所影响的行数的和。
reader.GetOrdinal("ColumnName"); //放在循环外面 //在循环里面始终要使用索引来获取列的数据,不要使用列明(低效率)
SqlDataReader使用注意事项
返回reader后数据在哪里?数据库服务器缓存
当使用DataReader的时候必须保证Connection为Open状态。
1. reader只读(不能通过reader修改数据。)、只进
2. reader每次读取一条就释放一条所以只能向前不能后退
由于功能有限,所以读取速度很快,适合从数据库中读取大量数据
使用reader根据列索引读取列数据而不是列名
使用强类型的GetString()、GetInt32、GetFloat()、GetDouble()….
数据库中的类型与C#的不太一样,数据库中的float,得用c#的GetDouble()来获取。
IsDbNull()
如果返回多个结果集则用NextResult()方法。通过do-while循环测试。
sql profiler[sql事件探查器,帮助找错]
ADO.NET连接池
1.默认情况下是启用连接池的。
2.可以在连接字符串中通过Pooling=false禁用连接池
3.当启用连接池后:
1>第一次创建连接对象的时候,确实是真正的创建了一个连接对象,并且连接数据库服务器,并且验证用户名和密码是否正确。
2>当第一个用户使用完毕该连接后,当该用户调用con.Close()方法的时候,并没有将该连接对象真正的关闭(该连接并没有关闭)。
也就是说:当调用con.Close()的时候,其实只是表示当前用户使用完毕了这个连接,要把该连接放入连接池中。当把一个连接对象放入连接池中后,那么其他的连接就可以使用连接池中的该连接对象了。
【当每个用户使用完毕连接后,立刻调用该连接对象的close()方法依然是非常有意义的,这样就可以保证把连接对象放入池中,放入池中后(放入池中的连接对象并没有关闭),其他新来的连接就可以继续使用该连接对象了,没有必要重新开一个新的连接】
3>当一个新的连接过来以后,是不是池中只要有空闲的连接对象,就可以使用呢?不是!
1. 只有新来的连接对象使用的连接字符串与池中现有的连接对象的连接字符串一模一样的时候才会从池中直接获取一个连接对象来使用,否则,会重新创建一个新的连接对象。
2. ado.net 会为每个连接字符串维护一个针对该连接字符串的池。对于不同的连接字符串的连接,依然会创建新的连接对象。
【注意】如果在程序中,不同的操作都是使用相同的连接字符串,那么建议启用连接池,如果每次操作使用的都是不同的连接字符串,那么建议最好禁用连接池,否则为每个连接字符串都维护一个连接池,对于数据库服务器来说就是每个连接都不关闭,所以性能不好。
一般什么情况下使用到ADO.NET连接池
1.创建对象的时候比较耗时
2.对象频繁被使用
如何清空连接池?Connection的静态方法 SqlConnection.ClearAllPools()、 SqlConnection.ClearPool()
Ado.net连接池使用总结
1. 第一次打开连接会创建一个连接对象。
2. 当这个连接关闭时(调用Close()方法时)会将当前那个连接对象放入池中。
3. 下一个连接对象,如果连接字符串与池中现有连接对象的连接字符串完全一致,则会使用池中的现有连接,而不会重新创建一个。
4. 只有对象调用Close(),的时候才会放入池中,如果一个连接对象一直在使用,则下次再创建一个连接对象发现池中没有,也会再创建一个新连接对象。
在池中的连接对象,如果过一段时间没有被访问则自动销毁。
--DataSet-DataTable-SqlDataAdapter
关于DataSet(临时数据库、内存数据库)、DataTable(内存表)
--SqlParameter的问题
new SqlParameter("@id",0) //有bug,不建议使用,会报错参数@id未赋值
new SqlParameter("@id",SqlDbType.Int){Value=0}; //建议这样使用
SqlHelper封装类,参考:链接:http://pan.baidu.com/s/1eQKyxz0 密码:8nq3
MSSQL ADO.NET的更多相关文章
- 基础 ADO.NET 访问MYSQL 与 MSSQL 数据库例子
虽然实际开发时都是用 Entity 了,但是基础还是要掌握和复习的 ^^ //set connection string, server,database,username,password MySq ...
- [干货来袭]MSSQL Server on Linux预览版安装教程(先帮大家踩坑)
前言 昨天晚上微软爸爸开了全国开发者大会,会上的内容,我就不多说了,园子里面很多.. 我们唐总裁在今年曾今透漏过SQL Server love Linux,果不其然,这次开发者大会上就推出了MSSQL ...
- 分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节
1:MSSQL SQL语法篇: BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | vie ...
- .NET基础拾遗(6)ADO.NET与数据库开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- C++-数据库【1】-C++连接MSSQL数据库
测试环境—— 系统:Win7 64bit 编译器:VC++ 2015 数据库:MSSQL 2008 R2 #include <Windows.h> #include <stdio.h ...
- ado.net 用c#与数据库连接实现增删改查
ADO.NET: 数据访问技术 就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 是所有数据访问技术的基础 ...
- Entity Framework与ADO.Net及NHibernate的比较
Entity Framework 是微软推荐出.NET平台ORM开发组件, EF相对于ado.net 的优点 (1)开发效率高,Entity Framework的优势就是拥有更好的LINQ提供程序. ...
- ADO.NET 增、删、改、查
ADO.NET:数据访问技术 就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中也可以将数据库中的数据提取到内存中供程序调用 所有数据访问技术的基础 连接 ...
- ADO.NET 增 删 改 查
ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...
随机推荐
- 【week11】psp
本周psp 项目 内容 开始时间 结束时间 被打断 净时间 11.26(星期六) 看论文 psiBlast 9:00 12:00 5 175 11.28(星期一) 做作业 设计模式作业 ...
- laravel连接多个不同数据库的单例类
在連接多個不同數據庫時,需要寫多個連接,爲了簡化該操作,可以使用該基類,不同的數據庫只要建立好相對應的類繼承該類,就可以使用ORM模型進行操作了. class singletonInstance { ...
- HttpHandler与HttpModule的理解与应用
问题1:什么是HttpHandler? 问题2:什么是HttpModule? 问题3:什么时候应该使用HttpHandler什么时候使用HttpModule? 答案1:HttpHandler,Http ...
- FZU2125_简单的等式
题目想到了就是一个水题. 提示一下,S(x,m)是一个很小的数.(不超过100) 这样直接枚举这个数,然后求方程的整数解,并且判断是否满足条件即可. ——————(一开始还用Pollard大整数分解+ ...
- webpack打包css样式出错
有两个组件home和search 两个组件中都有class为footer的元素 但是search的footer比home的多一条background的样式 本地开发的时候没问题,但是打包之后,home ...
- C++解析(1):C到C++的升级
0.目录 1.C与C++的关系 2.C到C++的升级 2.1 语言的实用性 2.2 register关键字 2.3 同名的全局变量 2.4 struct关键字 2.5 int f() 与 int f( ...
- c# partial使用
1.有2个类 class1.cs ,class2.cs 2.这2个类里面都可以定义成这样 public partial class ClassAll { } 3.结果,里面的方法都是共享的,就像 ...
- Ckeditor与Ckfinder(java)整合实现富媒体内容编辑(支持文件上传)
先来看一下最终的效果图 一.编辑器界面 二.上传图片界面 <!-------------------------------------------------------> 一.安装包下 ...
- 洛谷P1273 有线电视网 【树上分组背包】
题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...
- win平台搭建Lnmp环境
win10上面安装的phpStudy这些天有时候打不开网页 502,请求一直loading,就算是代码问题我也扶不住,安装个Redis,mongodb都超级麻烦,并且好多都模拟Linux做的东西,最终 ...