2018.12 数据库访问及SQL优化+Ado.Net总结
**************MSSQL**************
1.表之间的主外键关系参考下图连接建立:
如果一个表A中的某列在另一个表B会出现多次,就是一对多的关系
反之B表中的该列只会在A中有唯一的对应,那么就是一对一的关系
注意:一般2个表之间的关系,也是是针对2个表的主外键而言!
2.查询条件的表达式,可以使用口号来改变优先级
3.查询优先级
4.连接查询join,一般实际工作中inner join比较多(2个表需要完全匹配)
5.分步连接多个表:
6.count聚合函数,当需要显示的某列的为空null时,不做计数!
7.查询的语句的分步顺序:
8.针对分组情况进行,再次筛选:
9.Select查询的顺序总结:
10.数据库中的空值:
11.
12. C#自身使用的是托管资源,尤其是比如list、array等,是相对安全的,资源可以由C#自行释放;但是数据库、网络连接、本地文件等是外部资源,不属于c#托管,所以要及时释放!
**************Ado.Net**************
1.两种事件书写的方式::使用事件,是为了解耦,是一种发布-订阅模式
2.可变数组
3. 连接式读取数据库的方式:ExecuteReader的read()方法,它就是读取一个表的记录,即执行读,每次调用都是返回一行的结果集。一般用在判断这行的结果集是否有效果,有的话就执行下面的操作。一句话:一般用于判断返回的结果,读取过程中不能关闭连接。
- 不是把数据一次性读取到内存,而是逐行读取,期间一直要保持于数据库的连接,是一种长连接的方式!
- 而且语法与数据库类型有关
4. 断开式读取数据库的方式:可以将数据库内容一次性读取到内存中,然后断开数据库连接的方式(语法与数据库类型无关)如下:
①主要类及成员
②操作模式
5. 日常进行增删改查的封装类,如下:
6.广播的形式(其实跨窗口调用触发事件,跨类触发事件,或者跨窗口传递参数,都是这种形式)
7.跨窗口触发事件,也可以使用以下方式,(当只是简单传递参数时)
①在传递类中,定义相应的Action(不需要返回值时)
②在被传递的类中定义方法(参数类型与 Action<T>一致)
④在传递类中进行调用:
10.子查询
11.事务:
事务实例:
12. sqlDataReader 一般不结合dataTable进行操作,dataTable一般结合dataAdpter进行操作(一般不需要读表的话,只是查询一行数据的话,可以使用长连接sqlDataReader方式)
13.索引的使用情形:给表中需要频繁出现在where后的列添加索引,可以加快查询速度,但是不建议所有列添加索引