您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 纺织服装 > CS架构断开式应用程序设计入门教程
第十章数据库应用程序开发ADO.Net程序实现典型的数据库应用程序开发。数据库连接数据加载数据的简单和复杂绑定对DataSet数据浏览、插入、删除、确认和取消DataSet的表达式列和数据检索DataSet中数据表的关联对数据库的更新:CommandBuilder的更新机制报表设计-CrystalReportSQLServer基本数据准备:建立数据库teaching建立下列数据表:Students:学生表(id,name,classid)Grade:成绩表(id,subid,grade)Classes:班级表(classid,name)1.1ADO.NetADO/OLEDB和ODBC关系图VC++VBDelphiADOOLEDBODBCRDBMSRDBMSE-MailDirectoryServiceADO.NET结构.NETDataProviderDataSetCommandDataReaderParametersConnectionTransactionDataAdapterSelectCommandInsertCommandUpdateCommandDeleteCommandDataTableDataRowCollectionDataColumnCollectionConstraintCollectionDataReaderCollectionDataBaseXML1.2实例分析:设计一个Form实现对数据表students、subjects和grade编辑和浏览功能examplea1程序设计的两种方式自编程序设计方式:自编程序实例化dataset等对象、设置属性、动态连接数据库、实现数据绑定、数据表关联等。可视化设计方式:设计阶段通过添加组件,设置组件属性完成数据库的连接、数据绑定以及数据表的关联等,然后由系统生成部分程序。1.2.1自编程序方式一)把数据库中数据表数据显示在控件中1)连接数据库:teaching(SQLServer)2)数据库中数据载入DataSet:加载students3)DataSet中数据和控件的绑定:id和TextBox的绑定1)连接数据库:teaching(SQLServer)usingSystem.Data.OleDb;privateDataSetdataSet;privateOleDbConnectionoleDbConnection;privateOleDbDataAdapteroleDbDataAdapter;privatevoidConnectDB(){oleDbConnection=newOleDbConnection(Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=teaching);oleDbConnection.Open();}OleDbConnection中连接字符串:新建teaching.udl文件,双击后进入oleDB数据链接属性编辑,连接对应数据库并成功进行测试连接后,关闭窗口后teaching.udl中包含了连接字符串。2)数据库中数据载入DataSet:加载studentsprivatevoidLoadData(){oleDbDataAdapter=newOleDbDataAdapter(select*fromstudents,oleDbConnection);dataSet=newDataSet();oleDbDataAdapter.Fill(dataSet,students);}DataSet本身没有从数据库加载数据的能力,必须通过OleDbDataAdapter提供的Fill方法进行加载。在Fill过程中,若dataSet中没有students,则会自动建立,并把“select*fromstudents”结果载入。3)DataSet中数据和控件的绑定:id和TextBox的绑定privatevoidBindingControls(){textBox1.DataBindings.Add(text,dataSet,“students.id);}textBox1的Text属性和dataSet中students表的id字段进行绑定。绑定的结果是textBox1的值和dataSet中students表的id值会同步变化。在Form的load事件中执行下列语句:ConnectDB();LoadData();BindingControls();二)复杂绑定:classid数据取自classes表,提供选择功能。LoadData中增加下列程序oleDbDataAdapter.SelectCommand=newOleDbCommand(select*fromclasses,oleDbConnection);oleDbDataAdapter.Fill(dataSet,classes);在BindControls中增加下列程序:comboBox1.DataSource=dataSet.Tables[classes];;comboBox1.DisplayMember=name;comboBox1.ValueMember=classid;comboBox1.DataBindings.Add(selectedValue,dataSet,students.classid);三)加入浏览功能DataSet中的Table和数据库中数据表一样,没有行顺序的概念,所有没有提供行号定位的方法和属性当一个数据表数据绑定在Form上的若干控件后,由其BindingContext成员管理从Control类继承的任意对象的BindingManagerBase对象集合,通过设置其属性Position来控制当前显示的行:this.BindingContext[dataSet,students].Position+=1;注意students和控件的绑定方式不能写成下列形式,这将使Form仅显示首行内容,而无法通过上述方式定位到其他行。textBox1.DataBindings.Add(text,dataSet.Tables[students],id);首行对应Position=0,当Position=0,再-1属性值将不变。当Position=总行数-1,再加1同样值不变。绑定方式一致性:DataGridView,TextBox同步以及BindingContext的下标一致性匹配一:dataGridView1.DataSource=dataset;dataGridView1.DataMember=t_major;textBox1.DataBindings.Add(text,dataSet,“students.id);this.BindingContext[dataSet,students].Position=0;匹配二:dataGridView1.DataSource=dataset.Tables[“students];textBox1.DataBindings.Add(text,dataset.Tables[“students],“id);this.BindingContext[dataset.Tables[“students]].Position=0;关键在于三个语句中的Datasource参数的一致性,即dataGridView.Datasource、绑定语句中的第二个参数和BindingContext中的第一个下标必须一致。四)使用绑定对DataSet数据表进行插入和删除插入:this.BindingContext[dataSet,students].EndCurrentEdit();this.BindingContext[dataSet,students].AddNew();删除:this.BindingContext[dataSet,students].RemoveAt(this.BindingContext[dataSet,students].Position);取消当前行的修改:this.BindingContext[dataSet,students].CancelCurrentEdit();五)通过控件输入的DataSet数据的取消和确认功能控件输入数据与DataSet数据同步:this.BindingContext[dataSet,“students”].Position值变化或调用this.BindingContext[dataSet,“students”].EndCurrentEdit()后,界面控件数据才写入DataSet。取消修改:dataSet.RejectChanges():取消dataSet创建或调用dataSet.AcceptChanges()以后对dataSet所作的修改。接收修改:dataSet.AcceptChanges():接收对dataSet中数据所做的修改。dataSet中各表及表中各行对象均有取消和接受修改的上述两个方法,区别是其作用的对象范围不同。六)把DataSet数据存入数据库更新数据库中数据表的唯一途径是执行SQL的insert、update或delete语句,dataSet中数据的修改(表的增、删、改),要反映到数据库中,必须根据修改情况产生并执行相应的SQL语句。所以要根据对DataSet数据表的修改更新对应数据库中的数据表,必须完成下列三部分工作:标记DataSet中数据表做过修改的所有行,并记录作了何种修改(增、删、改)。编写或生成相应的带参数的insert、delete或update语句。对每个修改行,根据修改的种类,执行相应的更新数据库的语句。1)标记修改行及修改种类在dataSet中表的每一行对象有一个RowState属性,记录了该行是否作了修改及作了何种修改的信息:dataSet.Tables[students].Rows[0].RowState其值可为:DataRowState.Added/Modified/Deleted和Unchanged。当dataSet中表数据载入后,各行的状态为Unchanged,当对表中某行进行修改后,会根据修改类型自动改变该行的状态。在调用AcceptChanges后,对应行状态恢复到Unchanged状态。由于更新数据库的update方法是依据该状态来确定哪些行要修改和做什么修改,所以在用dataSet数据更新数据库前,不要调用用AcceptChanges。2)编写或生成相应的带参数的SQL语句(1)使用OleDBCommandBuilder产生更新数据库的带参数的SQL语句OleDbCommandBuilder可根据oleDBDataAdapter中的SelectCommand中的select语句,即调用Fill方法时执行的select语句,生成带参数的update、delete或insert语句。在窗口类中增加成员:OleDbCommandBuilderoleDbCommandBuilder;在LoadData加载(Fill)students数据语句后加:oleDbCommandBuilder=newOleDbCommandBuilder(oleDbDataAdapter);实例化oleDbCommandBuilder,并把oleDbDataAdapter作为其属性DataAdapter值,在要生成SQL语句前,oleDbCommandBuilder必须能访问非空的oleDbDataAdapter.SelectCommand。在生成SQL语句前,首先会执行上述的select语句,以获得对应表的列名信息,为生成做准备。生成的SQL语句将存放在该类的基类对应的三个private属性中:它们是UpdateCommand、DeleteCommand和InsertCommand。生成SQL语句的条件(如UpdateCommand)基
本文标题:CS架构断开式应用程序设计入门教程
链接地址:https://www.777doc.com/doc-2907150 .html