最早学习程序连接数据库是在牛腩老师做的“牛腩新闻发布系统”视频中学习的(c#+SQLServer)。作为偷懒,后期很多SQLHelper都是用的当时学习的结果,因此对于SqlDataAdapter类不是很理解。
今天翻到了绑定数据库的相关内容,因此对该类型重新进行了一遍学习和理解。
要将数据控件(datagridview)应用于数据库数据,必须创建三个对象。 首先需要一个连接对象(SqlConnection)来指定数据库位置和访问方法。 其次,必须创建一个数据适配器对象(SqlDataAdapter), 数据适配器在物理数据和数据集之间起桥接作用,通过使用连接对象来访问数据库。 最后可以生成一个 数据集对象(DataSet) ——最终控件需要连接显示的对象变量 。
SqlDataAdapter主要有两个函数方法:fill()和update()。前者用于下载数据到数据集,也是适配器主要的功能,毕竟数据主要是显示。后者用于将修改后的数据集更新反馈回数据库,因为数据集绑定在控件上,主要表现就是单元格修改后的内容会反馈回数据库(不使用update()方法,datagridview单元格修改结果不影响数据库数据)。换言之,使用适配器方法时,update如同commit提交事务(“提交事务”:数据库基本知识)。
SqlDataAdapter是适配器,作用是下载(或者说复制更为贴切)数据,之后更新(覆盖)原数据,除了这两个功能时,操作数据集数据时,连接是可关闭的。
而SqlDataReader和SqlCommand,分别为按行读取结果和执行命令。前者必须时刻连接数据库才能得到数据结果,功能也只有读取显示;后者通过将程序命令映射到数据库命令再通过数据库执行并返回结果,同样连接不可断,但可以做到多种操作。
从功能多样性和连接要求来看
功能多样性 | 连接要求 | |
SqlDataAdapter | 增删查改(数据操作) | 可断(调用方法时需要连接) |
SqlDataReader | 查(只能读取显示) | 不可断(数据读取下载结束才可关闭) |
SqlCommand | all(可执行过程、命令) | 不可断(反馈结果下载或另存才可关闭) |
注:其中SqlCommand的表反馈通常下载到DataTable中
作为个人的一个理解:Reader不说
你就好比是老总,数据库是秘书或者手下,适配器和命令是不同方式办事情。 适配器:由秘书复制一份文件给老总,老总随意修改数据或内容,若最终觉着合适,就覆盖秘书手中的文件。 命令:老总直接对秘书下达命令,比方说让他举办会议,订个出行,写一份文件,秘书自己去做并能按要求完成,不能完成也会汇报原因。
因此,常见的按钮等执行命令的方法还是主要通过SqlCommand方法,而对于可能被修改的,通过编辑控件修改的适合使用SqlCommand方法,通过GridView表格直接修改的适合使用SqlDataAdapter方法,简单显示的三种方法均可。