摘要:
(一)基础知识
- ADO.NET: .NET中用来向数据库提交执行SQL语句的一堆类
- 本机访问直接"Windows验证",但是一般项目中都是单独的数据库服务器,程序在另外一台电脑上连接SQLServer在项目中,一般不会启用sa账户,这个是最高权限账户,应该设置一个受限制的账户
(二)理解SqlDataReader
- SqlDataReader是连接相关的,SqlDataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中,SqlDataReader只是相当于一个指针(游标), 只能读取当前游标指向的行,一旦连接断开再不能读取.这样做的好处是无论查询结果有多少条,对程序占用的内存几乎没有影响.
- SqlDataReader对于小数据量的数据来说带来的只有麻烦. ADO.NET中提供了数据集的机制,将数据结果填充到本地内存中,这样连接断开,服务器断开都不影响数据的读取.数据集的好处是降低数据库服务器压力,编程也简单(其实原理大致还是用reader读取所有数据,储存在list中)
(三)编写SqlHelper文件
- SqlHelper的作用,主要作用: 读取配置文件的连接数据库字符串,实现一些和数据库的参数查询函数,传入参数一般是sql命令和parameter[]参数数组
- SqlHelper的一些问题,对于0参数 DataTable datatable = SqlHelper .ExecuteDataTable(sql, new SqlParameter[0]);
- 注意NULL和DBNULL的区别
一、连接字符串的写法
- Data Source=; 指定服务器IP(计算机名) 服务器\实例名
- Initial Catalog=;初始化分类,要连哪个数据库名
- UserId=sa;Password=sa;用户名密码
- Integrated Security=true; 使用Windows验证方法
- 另外一种写法(旧):"server=.;database=”数据库名字“;uid=sa;pwd=sa"
二、Ado.Net连接池
- 当第一次创建一个连接对象并调用Open()操作的时候,该连接对象会向数据库发出一个连接请求,并且进行连接。
- 当调用该对象的Close()方法时,并没有直下关闭连接对象,而是放入了“连接池”中,
- 当下次再创建一个连接对象的时候,如果该对象所使用的连接字符串与池中现有的连接对象使用的字符串一模一样(大小写空格等都必须一样),这时,并不会直下的再创建一个连接,而是使用池中现有的对象。
- 如果再次创建的连接对象所使用的连接字符串不一样,此时,则会创建一个新的连接。
- 只有当调用了连接对象的Close()方法后,当前连接才会放入到池中。
- 如果创建时和上一个连接对象一模一样,但上一个连接并没有Close()即:并没有放入池中,这时,也会创建一个连接。
三、ADO.Net中常用的几个对象
- Command:执行SQL语句命令
- DataReader:只读、只进结果集
- DataAdapter:适配器
- DataSet:相当于内存中的临时数据库
- SqlDataReader对象:
- reader.HasRow=true表明有数据
- reader.Read() 指向下一条 //读取前要先Read()
- reader[0] 获取列的数据
- reader[]有重载,有列索引也有列名,费钱要求使用列索引
- reader.GetValue(索引);
- reader.GetOrdinal(列名);根据列名获取列的索引
- reader.GetInt32(索引); 直接获取强类型 (有一个Null的问题)
- int? age =reader.IsDBNull(2)?null : (int?) reader.GetInt32(2);
- 使用时必需保证SqlConnection是打开的,不能中途关闭!
- reader.GetInt32(索引) 索引和查询的顺序有关!
- 不要忘记使用using()释放,DataReader独享一个Connection
四、使用存储过程
- cmd.CommandType=CommandType.Procedure //指定为存储过程
- pms[2].Direction = ParameterDirection.Output; //参数的输出方向:输入参数、输出参数