![C#程序设计基础-教程、实验、习题[赵敏][电子教案]第九章.ppt_第1页](http://file.renrendoc.com/FileRoot1/2019-1/12/c6e48300-975a-4353-b850-5e5e8c5f26a5/c6e48300-975a-4353-b850-5e5e8c5f26a51.gif)
![C#程序设计基础-教程、实验、习题[赵敏][电子教案]第九章.ppt_第2页](http://file.renrendoc.com/FileRoot1/2019-1/12/c6e48300-975a-4353-b850-5e5e8c5f26a5/c6e48300-975a-4353-b850-5e5e8c5f26a52.gif)
![C#程序设计基础-教程、实验、习题[赵敏][电子教案]第九章.ppt_第3页](http://file.renrendoc.com/FileRoot1/2019-1/12/c6e48300-975a-4353-b850-5e5e8c5f26a5/c6e48300-975a-4353-b850-5e5e8c5f26a53.gif)
![C#程序设计基础-教程、实验、习题[赵敏][电子教案]第九章.ppt_第4页](http://file.renrendoc.com/FileRoot1/2019-1/12/c6e48300-975a-4353-b850-5e5e8c5f26a5/c6e48300-975a-4353-b850-5e5e8c5f26a54.gif)
![C#程序设计基础-教程、实验、习题[赵敏][电子教案]第九章.ppt_第5页](http://file.renrendoc.com/FileRoot1/2019-1/12/c6e48300-975a-4353-b850-5e5e8c5f26a5/c6e48300-975a-4353-b850-5e5e8c5f26a55.gif)
已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【例9-20】 创建窗体应用程序,查看学生数据库 中stin表的内容及其字段结构。执行结果在Rich TextBox中。 (1) 先引用System.Data.SqlClient命名空间,然后 在窗体类中定义如下变量: SqlConnection conn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); string str = “Data Source=;Initial Catalog=学生;Integrated Security=True“; (2) 使用GetValues方法获取查询结果,代码如下: private void button1_Click(object sender, EventArgs e) /GetValues方法获取查询结果 richTextBox1.Text = “; conn.ConnectionString = str; conn.Open(); cmd.Connection = conn; cmd.CommandText = “select * from stin“; SqlDataReader result = cmd.ExecuteReader(); Object dataRow = new Objectresult.FieldCount; /定义以字段个数为长度Object数组 while (result.Read() = true) /每循环一次,指针后移一次 result.GetValues(dataRow); /获取当前行所有字段内容,保存到数组中 for (int i = 0; i result.FieldCount; i+) /逐字段显示当前行内容 richTextBox1.Text += dataRowi + “ “; richTextBox1.Text += “n“; result.Close(); conn.Close(); (3) 直接使用DataReader对象显示出所有查询结果: private void button2_Click(object sender, EventArgs e) richTextBox1.Text = “; conn.ConnectionString = str; conn.Open(); cmd.Connection = conn; cmd.CommandText = “select * from stin“; SqlDataReader result = cmd.ExecuteReader(); /执行命令,返回SqlDataReader对象 /迭代结果集中的行,直到读完最后一条记录, Read返回False while (result.Read() = true) for (int i = 0; i result.FieldCount; i+) richTextBox1.Text += resulti + “ “; /resulti用数字序号引用字段 richTextBox1.Text += “n“; result.Close(); conn.Close(); (4) 使用GetName方法获得表的结构 private void button3_Click(object sender, EventArgs e) /GetName方法获取字段名 richTextBox1.Text = “; conn.ConnectionString = str; conn.Open(); cmd.Connection = conn; cmd.CommandText = “select * from stin“; SqlDataReader result = cmd.ExecuteReader(); for (int i = 0; i result.FieldCount; i+) richTextBox1.Text += result.GetName(i) + “ “; /GetName方法获得所有列名 richTextBox1.Text += “n“; result.Close(); conn.Close(); 9.5 使用DataSet对象与DataAdapter对象 9.5.1 DataSet对象 DataSet对象是支持ADO.NET的断开、分布式数据方案 的核心对象。由于它在获得数据或更新数据后立即与数 据库断开,因此程序员能用它实现高效的数据库访问和 操作。DataSet对象是数据的内存驻留表示形式,无论 数据源是什么,都会提供一致的关系编程模型。 数据集(DataSet)独立于数据源,它的结构与关系数据 库类似,也是由表(DataTable)、行(DataRow)和列 (DataColumn)等对象构成的层次结构,在数据集中还 包含约束(Constraint)和关系(DataRelation)。 调用数据适配器(DataAdapter)对象的Fill( )方法填充数 据集,它将自动地在数据集中创建数据表,并设置它的 结构及向其中填充数据 一个数据集对象中可以包含多个DataTable ,通过DataRelation设置这些DataTable之 间的关系。表9-10是DataTable对象的常用 属性和方法,其中Rows、Columns中包含 的常用方法如表9-11所示。表(DataTable) 的结构是通过表的列(DataColumn)表示的 。DataColumn对象的常用属性如表9-12所 示。 表9-10 DataTable对象的常用属性和方法 DataTable属性和方 法 描 述 Rows设置或获取当前DataTable内的所有行 Columns设置或获取当前DataTable内的所有列 AcceptChanges( ) 提交自上次调用AcceptChanges( )方法以来对 当前表进行的所有更改 Clear( ) 清除DataTable里原来的数据,通常在获取新 的数据前调用 Load(IDataReader reader)方法 通过参数中的IDataReader,把对应数据源里 的数据装载到DataTable内 Merge(DataTable table)方法 把参数中的DataTable和当前DataTable合并 NewRow( )方法 为当前的DataTable增加一个新行,返回表示 行的DataRow对象 Select( )方法 选择符合筛选条件、与指定状态匹配的 DataRow对象组成的数组 表9-11 Rows、Columns常用方法 Rows 常用 方法 Rows常用方法描述 Colu mns 常用 方法 Columns 常用方法描述 Add( ) 向表(DataTable)中 添加新行 Add( )把新建的列添加到集合中 InsertAt ( ) 向表中添加新行到索 引号的位置 AddRa nge( ) 把DataColumn类型的数组 添加到列集合中 Remove ( ) 删除指定的行 (DataRow)对象 Remov e( ) 把指定的列从列集合中移 除 Remove At( ) 根据索引号删除指定 位置的行 Remov eAt( ) 把指定索引位置的列从列 集合中移除 表9-12 DataColumn对象的常用属性 属 性描 述 AllowDBNull是否允许当前列为空 AutoIncrement是否为自动编号 Caption设置或获取列的标题 ColumnName列的名字 DataType列的数据类型 DefaultValue列的默认值 MaxLength文本的最大长度 通过下面的代码了解向表中添加列。 DataTable mydt = myds.Tables.Add(“mytable“); /向表中添加列 DataColumn mycolumn = new DataColumn(); mycolumn.DataType=typeof(string);/该列的数据类型 mycolumn.AllowDBNull = true;/该列允许为空 mycolumn.Unique=false; /是否唯一 mycolumn.ReadOnly = false; /是否只读,其值为false表示可以 修改 mycolumn.DefaultValue = 1000;/默认值 mycolumn.AutoIncrement = true;/该值自动递增 mycolumn.AutoIncrementSeed = 1000;/种子 mycolumn.AutoIncrementStep = 1;/递增的步长 mycolumn.Caption = “年龄“;/标题,绑定在控件中显示 mycolumn.ColumnName = “age“;/列名 mydt.Columns.Add(mycolumn);/向 DataTable的对象mydt添加 列 为了维护数据的完整性,可以使用约束来对DataTable中 的数据施加限制,如外键约束(ForeignKey Constraint)、 唯一约束(UniqueConstraint)。 (1) 创建DataSet表间关系DataRelation对象。 在包含多个DataTable对象的DataSet数据集中, DataTable之间的关系使用类DataRelation表示。如: /myds为已经定义了的DataSet对象 DataRelation dr = new DataRelation(“CustOrders“, /CustOrders是关系名称 myds.Tables“Customers“.Columns“CustId“, /主键表及主键列 myds.Tables“Orders“.Columns“CustId“); /外键表及外键列 myds.Relations.Add(dr); /向数据集中添加关系 (2) 数据保存在DataTable的Rows属性中。 而数据行使用DataRow来表示。DataRow 对象的常用属性和方法如表9-13所示。 表9-13 DataRow对象的常用属性和方法 属性和方法描 述 RowState 当前行的状态(包括Added、Deleted、 Modified、Unchanged) AcceptChanges( ) 提交自上次AcceptChanges( )方法以来对 当前行的所有修改 Delete( )删除当前的DataRow对象 RejectChanges( ) 拒绝上次执行AcceptChanges( )方法以来 对当前行的所有修改 BeginEdit( )开始对当前DataRow对象的编辑操作 CancelEdit( )撤销对当前DataRow对象的编辑操作 EndEdit( )结束对当前DataRow对象的编辑操作 【例9-21】 利用DataGridView对象、DataTable对象的 Rows、Columns属性的Add( )方法,完成向表中添加列、 行及显示数据。运行结果如图9.6所示,代码如下: DataGridView dgv1 = new DataGridView(); this.Controls.Add(dgv1);/向窗体中添加dgv1对象 DataTable table = new DataTable(); table.Columns.Add(“姓名“, typeof(string); table.Columns.Add(“工作单位“, typeof(string); table.Columns.Add(“电话号码“, typeof(string); DataRow row = table.NewRow(); row“姓名“ = “苏丹“; row“工作单位“ = “南昌航空大学“; row“电话号码“ = “0791822222“; table.Rows.Add(row); row = table.NewRow(); row“姓名“ = “曾晓丽“; row“工作单位“ = “南昌大学“; row“电话号码“ = “0791866666“; table.Rows.Add(row); dgv1.DataSource = table; 9.5.2 DataAdapter对象 DataAdapter对象在DataSet与数据源之间起到桥梁的作用 。DataAdapter对象使用Fill( )方法将数据填充到DataSet 的DataTable中去,还可以将DataSet的数据更改送回数据 源。 DataAdapter对象隐藏了与Connection和Command对象 操作的细节。DataAdapter使用Connection来连接数据源 并取出数据,使用Command对象从数据源中检索数据并 将更改保存到数据源中。 在需要处理大量数据的场合,一直保持与数据库服务器的 连接会带来许多不便,这时可以使用DataAdapter对象, 以无连接的方式完成数据库与本机DataSet之间的交互。 通常使用OleDbData Adapter对象、SqlDataAdapter对象 。DataAdapter对象的属性、方法如表9-14所示。 表9-14 DataAdapter对象的属性、方法 DataAdapter对象属 性/方法 描 述 DeleteCommand 设置或获取SQL语句或存储过程,用于数据集的删除记 录 InsertCommand 设置或获取SQL语句或存储过程,用于将新记录插入到 数据源中 SelectCommand 设置或获取SQL语句或存储过程,用于选择数据源中的 记录 UpdateCommand 设置或获取SQL语句或存储过程,用于更新数据源中的 记录 Fill( )方法 将数据源数据填充到本机的DataSet或DataTable中,填 充后完成自动断开连接 Update( )方法把DataSet或DataTable中的处理结果更新到数据库中 数据适配器中包含4个数据命令属性,都属于SqlCommand 或 OleDbCommand类型的对象(假设myConnection为已经设置好的 连接数据库的字符串)。 SelectCommand属性:对应于Select语句,用于从数据源中 检索数据。如: OleDbDataAdapter myDataAdapter=new OleDbDataAdapter(); myDataAdapter.SelectCommand=new OleDbCommand(“select * from stin“,my Connection); UpdateCommand属性:对应于Update语句,用于更新数据 源。如: OleDbDataAdapter myDataAdapter=new OleDbDataAdapter(); myDataAdapter.UpdateCommand=new OleDbCommand(“update stin set sage=sage +2“, myConnection); InsertCommand属性:对应于Insert语句,用于向数据源中插 入新记录。如: OleDbDataAdapter myDataAdapter=new OleDbDataAdapter(); myDataAdapter.InsertCommand=new OleDbCommand(“insert into stin(sid,sname, sage) “+“values(sid,sname,sage) “,myConnection); DeleteCommand属性:对应于Delete语句, 用于删除数据源中的记录。如: OleDbDataAdapter myDataAdapter=new OleDbDataAdapter(); myDataAdapter.DeleteCommand=new OleDbCommand(“Delete from stin where sname=张三“,myConnection); 图9.7 例9-22运行界面 【例9-22】 创建窗体应用程序,利用 OleDbDataAdapter对象和DataGridView控件实现 数据库内容的显示和交互式更新。 设计时向窗体中添加MenuStrip控件和 DataGridView控件,并将DataGridView的Dock属 性设置为Fill,使之充满窗口。运行时单击“查看” 菜单项,在窗口中显示指定数据库表的内容,对 表中内容进行追加、修改等操作,按Enter键确认 之后,单击“保存修改”菜单项,就能将更新结果 保存到数据源中。代码如下: using System.Data.OleDb; namespace ex09_06 public partial class Form1 : Form public Form1() InitializeComponent(); OleDbDataAdapter adapter;/创建一个OleDbDataAdapter实例 DataTable table = new DataTable();/创建一个DataTable实例 private void Form1_Load(object sender, EventArgs e) string str = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E: zmc#examplestudent.mdb“; string sql = “select * from stin“; adapter = new OleDbDataAdapter(sql, str); OleDbCommandBuilder buider = new OleDbCommandBuilder(adapter); adapter.DeleteCommand = buider.GetDeleteCommand(); adapter.InsertCommand = buider.GetInsertCommand(); adapter.UpdateCommand = buider.GetUpdateCommand(); private void 查看ToolStripMenuItem_Click(object sender, EventArgs e) table.Clear(); adapter.Fill(table); dataGridView1.DataSource = table; private void 保存修改 ToolStripMenuItem_Click(object sender, EventArgs e) /dataGridView1.EndEdit()在数据库更新期间禁止 对dataGridView1的修改 dataGridView1.EndEdit(); adapter.Update(table); MessageBox.Show(“修改后的数据已经成功地保 存到数据库中“, “数据保存“); 在DataAdapter对象初始化时,使用了如下的构造 函数重载形式: adapter = new OleDbDataAdapter(sql,str);执行 这个语句,实际上就自动构造了对应的 Connection和Command对象,同时根据连接字 符串str自动完成了连接初始化。注意: Connection和Command对象都处于关闭状态。 dataGridView1.DataSource = table; DataTable对象赋值给DataGridView控件的 DataSource属性。 由于通过CommandBuilder对象自动生成了 DataAdapter对象的UpdateCommand属性,所以 在DataGridView控件中修改数据后,就可以利用 Update( )方法把更新后的数据保存到数据库。 以OleDbDataAdapter组件为例,以图形化方式创 建和配置OleDbDataAdapter。 数据适配器向导提供了一系列对话框,使用它们 可以选择通过其发送命令的连接,然后定义用于 检索或更新数据的SQL语句。在完成相关的设置 之后,C#.NET将自动生成配置 OleDbDataAdapter 的代码。 【例9-23】 使用OleDbDataAdapter控件创建 OleDbDataAdapter类的实例。步骤如下。 (1) 打开窗体Form1.cs的设计器。 (2) 如果工具箱中没有OleDbDataAdapter控件, 则选择“工具”“选择工具箱项”菜单项,弹出“选 择工具箱项”页面,在“.NET Framework组件”选项 卡中选中“OleDbDataAdapter”(如图9.8所示),然 后单击“确定”按钮。之后可在工具箱中查看到 OleDbDataAdapter控件。 图9.8 选择工具箱项 (3) 在工具箱中选择OleDbDataAdapter控件 ,放在窗体上并单击,这时数据适配器配 置向导会自动启动,如图9.9所示。 图9.9 选择数据连接 在此页面中为所创建的数据适配器选择一种数据 连接,若下拉列表框中已经列出了要使用的数据 连接,可以直接单击“下一步”按钮;若在下拉列 表中没有列出要使用的数据连接,可以单击“新建 连接”按钮,此时将打开“添加连接”页面,为数据 适配器新建数据连接。 (4) 这时将打开如图9.10所示“数据适配器配置向 导”之“选择命令类型”页面。在该页面选择“使用 SQL语句”或“使用现有的存储过程”。该例中选择“ 使用SQL语句”。如果使用的是SqlDataAdapter, 还可以选择“创建新存储过程”或“使用现有存储过 程”,SqlDataAdapter控件使用方法和 OleDbDataAdapter控件的使用方法相似。 (5) 单击“下一步”按钮,将打开该向导的“生成SQL 语句”页面,如图9.11所示,在该页面中可直接写 入SQL语句,也可用“查询生成器”以图形方式生 成SQL语句。 (6) 单击“查询生成器”按钮,将打开“添加表”页面 ,如图9.12所示。在该页面中显示该数据库中的 所有表,该例中只有stin表,将其选中,然后单击 “添加”按钮,关闭该页面。 图9.10 选择命令类型 图9.11 生成SQL语句 图9.12 选择表或视图 (7) 在“查询生成器”页面中(如图9.13所示),选中 每列的复选框sid、sname、sage。每选中一个复 选框时,C#.NET将把相应的域添加到查询生成器 生成语句中。单击“确定”按钮,返回“生成SQL语 句”页面,查询生成器生成的SQL语句将出现在“ 生成SQL语句”页面中,如图9.14所示。 图9.13 根据选择的域生成SQL语句 图9.14 “生成SQL语句”页面 (8) 单击“生成SQL语句”页面的“高级选项 (A)”按钮,打开“高级选项”页面,如图9.15 所示。在该页面中,如果选中第一个复选 框,C#.NET将配置OleDbDataAdapter以 便创建OleDbCommand对象;若选中第二 个复选框,将以不同的方式生成UpDate、 Delete语句,以便复制当两个用户同时更新 相同的记录时可能产生的错误。 图9.15 高级选项页面 单击“确定”按钮,关闭页面,然后单击“下一步”按 钮,能够查看到对数据适配器的配置结果。单击“ 完成”按钮,此时可以在窗体设计器的窗体下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年机械加工初级技能考核试题
- 2025年财务会计岗位招聘考试模拟题与答案指南
- 2025年大数据分析工程师专业技能测试题库及答案集
- 2025年采购经理竞聘面试题库
- 布鲁氏菌病预防知识培训
- 2025年美甲工具项目立项申请报告
- 2025年环氧抗静电漆项目立项申请报告
- 2025年海岛自动气象遥测系统项目提案报告
- 2025年特种作业类金属非金属矿山安全作业金属非金属矿山井下电气作业-金属非金属矿山排水作业参考题库含答案解析
- 2025年特种作业类特种设备作业-观光车和观光列车司机N2参考题库含答案解析
- 2025年秋季开学第一课《翻越你的浪浪山》课件
- 2025年疾控实验室生物安全及保密相关知识理论培训考试试题(含答案)
- 2025年岗前安全培训试题及答案
- 食品用纸包装容器等制品生产许可实施细则
- 光伏电站施工质量控制与安全措施
- 2025至2031年中国影视广告片行业投资前景及策略咨询研究报告
- 无人机应急处置预案
- 2025年山东省青岛市中考化学真题含答案
- 托育机构管理办法
- 财务报销费用培训
- 2024年甘肃省卓尼县邮政公开招聘工作人员试题带答案详解
评论
0/150
提交评论