数据表的主键大家都知道,那这个每行的RowState是什么东西?
其实我们在对DataTable中的行进行增删改操作时,这些行都没有并没有被改动,而是其RowState这个属性被修改了,这属性是一个只读的枚举类型。
【详细的RowState请看本人博客中另一篇DataTable中的RowState属性】
3、DataAdapter
继承层次图:

图里面写到了ODBC,Ole,那我就理一下关于连接数据库的发展历史:
- odbc之前:使用的不同的数据库都有各自对应数据库访问API,领导说换数据库,那就需要修改源码,这会整死程序猿的;
- odbc时:定义了一个公共数据访问层,可以用来访问几乎所有的关系型数据库,各个数据库厂商提供相应的驱动即可;
- ole db时:基于odbc,不仅可以访问关系型数据库,还可以访问非关系型数据
- 那什么是ADO呢?ADO是面向对象的结果,能够做到和ole db一样,但比ole db更简单,也就是说,ADO将ole db中的方法封装成多个类,只要主要是九个类的使用;
- ADO.NET呢?这个主要是增加了一个SqlClient,专门用于访问SQL Server,也是它访问SQL Server最快。
我也是主要使用SqlDataAdapter这个类,如果论通用性,当然是使用OleDbAdapter会好一点。
下面就讲一下SqlDataAdapter这个类:
它有四个构造函数:

在这里也可以讲一下SqlDataAdapter和SqlDataReader的区别:
SqlDataAdapter的实例是一次将需要的结果集拿到内存中,并自动关闭数据库连接(以后数据库连接都称为conn);而SqlDataReader的实例是调用Reader()方法,它维持了一个指针的作用,一次读取一个元组并自动向下挪动一位,并且只能从结果集中的第一行开始,不能回头(上一篇博客有讲过SqlDataReader对象),而且在这个挪动指针读取元组的过程中,conn一直保持连接,需要手动去关闭,或者使用using代码块。如果只是要查询数据,使用SqlDataReader会更好一点,因为他速度比SqlDataAdapter要快。
模拟在内存中的数据库DataSet相关的类
标签:修改 www 结构 sql isp 定义 设置 and cin