




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录数据集DataSet存取数据库31可视化使用数据集存取数据库31.1功能31.2实现31.2.1创建窗体31.2.2数据源、数据集、数据表、适配器、绑定源、可视化对象41.2.3给可视化对象指定数据源41.2.4响应“保存修改”按钮的Click消息52代码使用DataSet取取数据库52.1功能52.2实现62.2.1创建窗体62.2.2代码创建数据连接、表适配器、数据集、绑定源对象62.2.3给可视化对象指定数据源72.2.4响应“保存修改”按钮的Click消息73使用DbHelper操作数据集73.1功能73.2实现83.2.1创建窗体83.2.2修改SqlDbHelper83.2.3给可视化对象指定数据源103.2.4响应“保存修改”按钮的Click消息114使用DataSet存取Access数据库124.1功能124.2实现124.2.1创建窗体124.2.2创建AccDbHelper类124.2.3给可视化对象指定数据源164.2.4响应“保存修改”按钮的Click消息175DataReader与DataTable存取方式对比185.1对比185.2功能185.3实现195.3.1创建窗体195.3.2通过DataReader获取数据195.3.3通过DataTable获取数据20数据集DataSet存取数据库1 可视化使用数据集存取数据库1.1 功能1. 可视化创建数据集(定义数据库连接字符串)、可视化创建数据绑定源、表适配器对象2. 可视化绑定集合对象DataGridView、导航条对象、字段对象TextBox,用于显示数据3. 使用表适配器的Update方法提交对数据表的更新。1.2 实现1.2.1 创建窗体添加一个面板,上面放“学号、姓名、性别、年龄、单位”字段的文本编辑框,“保存修改”按钮,再放一个导航条和DataGridView控件,如下图。1.2.2 数据源、数据集、数据表、适配器、绑定源、可视化对象数据源通过是指数据库,可以是SQL Server、Oracle、Access等数据库,一个数据库可以包含多个数据表、视图、存储过程、函数等对象;数据集相当于一个内存数据库,一个数据集可以包含多个数据表、视图、存储过程、函数等对象;要想让数据库的数据与可视化的数据对象联系起来,需要一系列的对象来连接,包括:适配器、绑定源,这些对象的关系如下图。1.2.3 给可视化对象指定数据源1. 给DataGridView指定数据源时,若已经存在数据源,可以使用现有数据源,如果不存在,系统会指导用户创建一个数据源,在创建数据源,指定一个数据表,如:DBS中的Student表,系统会自动创建三个对象: 2. 给导航条指定数据源:如果需要绑定的绑定源已经存在,只须指定导航条的BindingSource属性即可,如:本例中指定BindingSource属性值为“studentBindingSource”。3. 给几个文本框字段指定数据源:需要指定文本框的“(DataBingings)”属性中的“Text”属性的绑定源,如:本例中的“学号”与“studentBindingSource - Sno”绑定,其它类似。1.2.4 响应“保存修改”按钮的Click消息调用表适配器的Update()方法,可以实现用数据集dbsDataSet中的最新数据更新数据源中对应的数据表(即数据表S),代码如下。 private void btnSave_Click(object sender, EventArgs e) studentTableAdapter.Update(dBSDataSet.Student); 注意:该方式实现的数据表更新,不同于以往的单记录插入/修改/删除,而是多记录、多方式同时修改。2 代码使用DataSet取取数据库2.1 功能1. 通过代码创建数据连接、表适配器、数据集、绑定源对象2. 通过代码绑定DataGridView对象、导航条对象、字段对象TextBox,用于显示数据。(还有其它对象,如:Combox, ListBox对象如何绑定?)3. 使用表适配器的Update方法提交对数据表的更新。2.2 实现2.2.1 创建窗体添加一个面板,上面放“学号、姓名、性别、年龄、单位”字段的文本编辑框,“保存修改”按钮,再放一个导航条和DataGridView控件,如下图。2.2.2 代码创建数据连接、表适配器、数据集、绑定源对象下面的代码分别创建了4个对象,_daStudent和_dsDBS是私有成员变量。 / 1. 创建数据库连接对象 string sConn = Data Source=.Sql2008;User=sa;Pwd=lwh206;initial catalog=DBS; SqlConnection conn = new SqlConnection(sConn); / 2. 创建数据适配器对象 string sql = SELECT Sno, Sname, Ssex, Sage, Sdept FROM Student; _daStudent = new SqlDataAdapter(sql, conn); / 4. 创建数据集对象,并填充数据集 _dsDBS = new DataSet(); / 连接数据库 conn.Open(); / 使用数据适配器填充数据集中的S表 _daStudent.Fill(_dsDBS, Student); / 关闭数据库 conn.Close(); / 5. 定义绑定源对象 BindingSource bsStudent = new BindingSource(); / 设置绑定源对象的数据源对象(数据集对象) bsStudent.DataSource = _ dsDBS.TablesStudent;2.2.3 给可视化对象指定数据源 / 6. 三类可视化对象均绑定到bsStudent,这样才能实现三者联动 / 设置DataGridView的数据源 dataGridView1.DataSource = bsStudent; / 设置导航条的绑定源 bindingNavigator1.BindingSource = bsStudent; / 设置文本框的数据绑定 txtSno.DataBindings.Add(Text, bsStudent, Sno); txtSname.DataBindings.Add(Text, bsStudent, Sname); txtSsex.DataBindings.Add(Text, bsStudent, Ssex); txtSage.DataBindings.Add(Text, bsStudent, Sage); txtSdept.DataBindings.Add(Text, bsStudent, Sdept);2.2.4 响应“保存修改”按钮的Click消息如何要实现保存修改的功能,必须在第3步创建一个SqlCommandBuilder对象,创建该对象的实质是系统自动给指定的适配器添加了Insert、Update、Delete语句,适配器没有这三个语句是不能执行保存修改操作的。 / 3. 根据数据适配器对象创建SqlCommandBuilder对象(实际上是添加数据适配器的插删改命令) SqlCommandBuilder cb = new SqlCommandBuilder(_daStudent);然后才能够调用表适配器的Update()方法,使用数据集dsDBS.TablesStudent中的最新数据更新数据源中对应的数据表,具体是什么操作(插入/修改/删除)取决于数据表的状态,代码如下。 private void btnSave_Click(object sender, EventArgs e) _daStudent.Update(_dsDBS.TablesStudent); 3 使用DbHelper操作数据集3.1 功能1. 修改SqlDbHelper返回数据表对象;2. 修改SqlDbHelper返回数据表的同时,返回适配器对象;3.2 实现3.2.1 创建窗体添加一个面板,上面放一个“保存修改”的按钮,再放一个导航条和DataGridView控件,如下图。3.2.2 修改SqlDbHelper数据集是数据表的容器,实际数据操作或数据显示时,都是与数据表或数据适配器相关的,所以,我们只需要在DbHelper中添加能返回数据表和数据适配器的方法即可。在SqlDbHelper类中添加两个方法,一个用于只返回DataTable,另一个不仅可以返回DataTable,而且可以同时返回DataAdapter。 public DataTable GetDataTable(string strCmd) var cmd = new SqlCommand(strCmd); var result = new DataTable(); var adapter = new SqlDataAdapter(cmd); try OpenConnection(); cmd.Connection = _conn; adapter.Fill(result); catch (Exception) return result; finally CloseConnection(); return result; public DataTable GetDataTable(string strCmd, out SqlDataAdapter dataAdapter) var cmd = new SqlCommand(strCmd); var result = new DataTable(); var adapter = new SqlDataAdapter(cmd); try OpenConnection(); cmd.Connection = _conn; adapter.Fill(result); catch (Exception) dataAdapter = adapter; return result; finally CloseConnection(); dataAdapter = adapter; return result; 3.2.3 给可视化对象指定数据源由于SqlDbHelper对象使用了app.config保存数据库的连接字,其内容如下: 如果只需要显示数据,只需要响应窗体的Load事件即可,如下: private void Form1_Load(object sender, EventArgs e) / 1. 创建数据库连接对象 SqlDbHelper dbHelper = new SqlDbHelper(); var dtStudent = dbHelper.GetDataTable(SELECT * FROM Student); / 4. 定义绑定源对象 BindingSource bsStudent = new BindingSource(); / 设置绑定源对象的数据源对象(数据集对象) bsStudent.DataSource = dtStudent; / 6. 三类可视化对象均绑定到bsStudent,这样才能实现三者联动 / 设置DataGridView的数据源 dataGridView1.DataSource = bsStudent; / 设置导航条的绑定源 bindingNavigator1.BindingSource = bsStudent; / 设置文本框的数据绑定 txtSno.DataBindings.Add(Text, bsStudent, Sno); txtSname.DataBindings.Add(Text, bsStudent, Sname); txtSsex.DataBindings.Add(Text, bsStudent, Ssex); txtSage.DataBindings.Add(Text, bsStudent, Sage); txtSdept.DataBindings.Add(Text, bsStudent, Sdept); 3.2.4 响应“保存修改”按钮的Click消息如果要实现保存修改的功能,前面提到过必须要得到数据适配器,且要给适配器创建SqlCommandBuilder对象。定义2个私有成员对象 private SqlDataAdapter _daStudent; private DataTable _dtStudent;重写窗体的Load事件响应代码 private void Form1_Load(object sender, EventArgs e) / 1. 创建数据库连接对象 SqlDbHelper dbHelper = new SqlDbHelper(); _dtStudent = dbHelper.GetDataTable(SELECT * FROM Student, out _daStudent); / 3. 根据数据适配器对象创建SqlCommandBuilder对象(实际上是添加数据适配器的插删改命令) SqlCommandBuilder cb = new SqlCommandBuilder(_daStudent); / 4. 定义绑定源对象 BindingSource bsStudent = new BindingSource(); / 设置绑定源对象的数据源对象(数据集对象) bsStudent.DataSource = _dtStudent; / 6. 三类可视化对象均绑定到bsStudent,这样才能实现三者联动 / 设置DataGridView的数据源 dataGridView1.DataSource = bsStudent; / 设置导航条的绑定源 bindingNavigator1.BindingSource = bsStudent; / 设置文本框的数据绑定 txtSno.DataBindings.Add(Text, bsStudent, Sno); txtSname.DataBindings.Add(Text, bsStudent, Sname); txtSsex.DataBindings.Add(Text, bsStudent, Ssex); txtSage.DataBindings.Add(Text, bsStudent, Sage); txtSdept.DataBindings.Add(Text, bsStudent, Sdept); 响应保存修改按钮事件 private void btnSave_Click(object sender, EventArgs e) _daStudent.Update(_dtStudent); 4 使用DataSet存取Access数据库4.1 功能1. 在MyDbHelper的类库中添加一个AccDbHelper类,提供与SqlDbHelper相同的功能;2. 使用第3示例的方式实现Access数据库的显示和保存;注意:由于Access的驱动程序只能在x86模式下运行,测试时必须设置项目的“目标平台”为x86,参见文档数据库编程经验集.docx。4.2 实现4.2.1 创建窗体添加一个面板,如下图。4.2.2 创建AccDbHelper类在MyDbHelper类库中添加一个AccDbHelper.cs文件,其中定义AccDbHelper类,如下:using System;using System.Collections.Generic;using System.Configuration;using System.Data;using System.Data.OleDb;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDbHelper / / Access数据库访问类,封装访问数据库一系列方法 / public class AccDbHelper : IDisposable private static string _connStr = ; /这个地方不应该使用静态字段,多线程访问单个连接时会出现错误 private OleDbConnection _conn; public void Dispose() GC.SuppressFinalize(true); static public void GetConnStr() _connStr = ConfigurationManager.ConnectionStringsConnectionString.ConnectionString.Trim(); / / 得到当前连接对象 / / 连接对象 static public OleDbConnection GetConn() if (_connStr = ) GetConnStr(); var conn = new OleDbConnection(_connStr); return conn; public void OpenConnection() _conn = GetConn(); _conn.Open(); public void CloseConnection() if (_conn.State != ConnectionState.Closed) _conn.Close(); /- 执行命令 - public bool ExecuteNonQuery(string strCmd) var cmd = new OleDbCommand(strCmd); try OpenConnection(); cmd.Connection = _conn; cmd.ExecuteNonQuery(); return true; catch (Exception) return false; finally CloseConnection(); /- 返回DataReader - public OleDbDataReader ExecuteReader(string strCmd) var cmd = new OleDbCommand(strCmd); try OpenConnection(); cmd.Connection = _conn; return cmd.ExecuteReader(CommandBehavior.CloseConnection); catch (Exception) CloseConnection(); return null; public DataTable GetDataTable(string strCmd) var cmd = new OleDbCommand(strCmd); var result = new DataTable(); var adapter = new OleDbDataAdapter(cmd); try OpenConnection(); cmd.Connection = _conn; adapter.Fill(result); catch (Exception) return result; finally CloseConnection(); return result; public DataTable GetDataTable(string strCmd, out OleDbDataAdapter dataAdapter) var cmd = new OleDbCommand(strCmd); var result = new DataTable(); var adapter = new OleDbDataAdapter(cmd); try OpenConnection(); cmd.Connection = _conn; adapter.Fill(result); catch (Exception) dataAdapter = adapter; return result; finally CloseConnection(); dataAdapter = adapter; return result; 4.2.3 给可视化对象指定数据源由于AccDbHelper对象使用了app.config保存数据库的连接字,其内容如下: 如果只需要显示数据,只需要响应窗体的Load事件即可,如下: private void Form1_Load(object sender, EventArgs e) / 1. 创建数据库连接对象 AccDbHelper dbHelper = new AccDbHelper(); DataTable dtStudent = dbHelper.GetDataTable(SELECT * FROM Student); / 4. 定义绑定源对象 BindingSource bsStudent = new BindingSource(); / 设置绑定源对象的数据源对象(数据集对象) bsStudent.DataSource = dtStudent; / 6. 三类可视化对象均绑定到bsStudent,这样才能实现三者联动 / 设置DataGridView的数据源 dataGridView1.DataSource = bsStudent; / 设置导航条的绑定源 bindingNavigator1.BindingSource = bsStudent; / 设置文本框的数据绑定 txtSno.DataBindings.Add(Text, bsStudent, Sno); txtSname.DataBindings.Add(Text, bsStudent, Sname); txtSsex.DataBindings.Add(Text, bsStudent, Ssex); txtSage.DataBindings.Add(Text, bsStudent, Sage); txtSdept.DataBindings.Add(Text, bsStudent, Sdept); 4.2.4 响应“保存修改”按钮的Click消息如果要实现保存修改的功能,前面提到过必须要得到数据适配器,且要给适配器创建SqlCommandBuilder对象。定义2个私有成员对象 private OleDbDataAdapter _daStudent = null; private DataTable _dtStudent;重写窗体的Load事件响应代码 private void Form1_Load(object sender, EventArgs e) / 1. 创建数据库连接对象 AccDbHelper dbHelper = new AccDbHelper(); _dtStudent = dbHelper.GetDataTable(SELECT * FROM Student, out _daStudent); / 3. 根据数据适配器对象创建SqlCommandBuilder对象(实际上是添加数据适配器的插删改命令) OleDbCommandBuilder cb = new OleDbCommandBuilder(_daStudent); / 4. 定义绑定源对象 BindingSource bsStudent = new BindingSource(); / 设置绑定源对象的数据源对象(数据集对象) bsStudent.DataSource = _dtStudent; / 6. 三类可视化对象均绑定到bsStudent,这样才能实现三者联动 / 设置DataGridView的数据源 dataGridView1.DataSource = bsStudent; / 设置导航条的绑定源 bindingNavigator1.BindingSource = bsStudent; / 设置文本框的数据绑定 txtSno.DataBindings.Add(Text, bsStudent, Sno); txtSname.DataBindings.Add(Text, bsStudent, Sname); txtSsex.DataBindings.Add(Text, bsStudent, Ssex); txtSage.DataBindings.Add(Text, bsStudent, Sage); txtSdept.DataBindings.Add(Text, bsStudent, Sdept); 响应保存修改按钮事件 private void btnSave_Click(object sender, EventArgs e) if (_daStudent != null) _daStudent.Update(_dtStudent); 5 DataReader与DataTable存取方式对比5.1 对比DataReader是一个只读对象,只能从DataReader中读取数据,不能更新(插删改)DataReader对象,而且DataReader是一个只能向前读的只读对象,不能随机读取。DataReader效率高,占用空间少。DataTable是一个可读写对象,在更新DataTable时,DataTable中不仅保存了最后的结果数据,而且保存了各种状态数据(修改前数据、删除前数据),DataTable对象可以随机读取任意记录行。DataTable效率低,占用空间多。5.2 功能1. 以Access数据库为例,通过DataTable对象创建学生对象列表,然后绑定到可视化对象;2. 从数据库服务器返回DataReader对象,在客户端创建DataTable对象,然后绑定到可视化对象;注意:由于Access的驱动程序只能在x86模式下运行,测试时必须设置项目的“目标平台”为x86,参见文档数据库编程经验集.docx。5.3 实现5.3.1 创建窗体添加一个面板,如下图。5.3.2 通过DataReader获取数据使用AccDbHelper对象通过DataReader获取数据,然后在客户端创建DataTable对象,再与可视化对象绑定,该示例展示了DataReader对象向DataTable对象的转换,充分利用了从服务器轻载获取数据,在客户端使用DataTable与可视化控件的良好交互性,但缺点是这种方式不能不实现数据表更新,因为真正与数据库连接的对象是DataReader,DataReader只是一个只读对象。若要实现数据表的更新,只能采用单记不的插入/修改/删除方式 private void btnDataReader_Click(object sender, EventArgs e) / 1. 创建数据库连接对象 AccDbHelper dbHelper = new AccDbHelper(); OleDbDataReader dataReader = dbHelper.ExecuteReader(SELECT * FROM Student); / 2. 建立学生数据表 DataTable dtStudent = new DataTable(); dtStudent.Load(dataReader); dataReader.Close(); / 4. 定义绑定源对象 BindingSource bsStudent = new BindingSource(); / 设置绑定源对象的数据源对象(数据集对象) bsStudent.DataSource = dtStudent; / 6. 三类可视化对象均绑定到bsStudent,这样才能实现三者联动 / 设置DataGridView的数据源 dataGridView1.DataSource = bsStudent; / 设置导航条的绑定源 bindingNavigator1.BindingSource = bsStudent; / 设置文本框的数据绑定 txtSno.DataBindings.Add(Text, bsStudent, Sno); txtSname.DataBindings.Add(Text, bsStudent, Sname); txtSsex.DataBindings.Add(Text, bsStudent, Ssex); txtSage.DataBindings.Add(Text, bsStudent, Sage); txtSdept.DataBindings.Add(Text, bsStudent, Sdept); 5.3.3 通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年江西中考数学试卷真题答案解读及备考指导
- 高中化学课程中校园植物化学成分分析与应用研究论文
- 小学生网络互动游戏对认知发展影响分析论文
- 高中语文课程思政教育中的历史教育价值挖掘与传承论文
- 中国医药级酮咯酸氨丁三醇行业市场前景预测及投资价值评估分析报告
- 节电方案与管理制度
- 英文版公司管理制度
- 电工学试题集和试题集及答案
- 小学语文《夜色》课件
- 财务管理学自考历年真题
- NB/T 11123-2023煤矿安全双重预防机制规范
- 内墙抹灰安全技术交底
- 中学美术校本教材《素描》
- 上海市2023年初中毕业物理课程终结性评价指南
- 中国教师发展基金会国家教师科研基金规划全国重点课题实施指南
- (通桥【2018】8370)《铁路桥梁快速更换型伸缩缝安装图》
- “双减”背景下的初中数学课堂教学设计与思考 论文
- 义务教育语文课程标准(2022)测试题带答案(20套)
- (医院护理论文)护理本科生学习适应现状及影响分析
- 保护性约束完整版
- 明源地产erp3.04-费用管理操作手册
评论
0/150
提交评论