您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 面向对象程序设计第十二章
第12章数据库应用程序设计12.1ADO.NET数据访问模型1..NETFramework数据提供程序数据提供程序用于连接到数据库、执行命令和检索结果。SQLServer数据提供程序使用它自身的协议与SQLServer通信。它位于命名空间System.Data.SqlClient中。OLEDB数据提供程序通过OLEDB服务组件和数据源的OLEDB提供程序与OLEDB数据源进行通信。它位于System.Data.OleDb命名空间中。ODBC数据提供程序通过ODBC与数据源进行通信。它位于System.Data.Odbc命名空间中。Oracle数据提供程序通过Oracle客户端与数据源进行通信。它位于System.Data.OracleClient命名空间中。2.数据提供程序的核心对象Connection对象用于与特定的数据源建立连接;Command对象用于对数据源执行命令;DataReader对象用于从数据源中读取只向前的只读数据流,它是一个简易的数据集;DataAdapter对象在数据源与DataSet之间建立一个桥梁。3.DataSetDataSet较复杂的数据集,是支持ADO.NET的断开式、分布式数据方案的核心对象。DataSet数据集可以包含表、表间关系、主外键约束等等,因此它实际上是一个持久的、完整的关系模型,可以把DataSet看作内存中的数据源。4.数据访问方式连接式数据访问和断开式数据访问:当使用连接式数据访问时,必须显式建立与数据源的连接,并维持该连接,直至操作完成才能断开与数据源的连接。断开式数据访问允许通过DataSet对象或者DataTable对象获取数据源数据的一个副本,可以在断开与数据源连接的情况下,访问副本中的数据。5.示例数据库在SQLServer中创建一个名为StudentInfo的数据库,数据库中包含student(学生)数据表12.2连接式数据访问使用连接式数据访问,要用到Connection、Command和DataReader对象,并遵循以下步骤:选择所使用的数据源,即选择使用哪个.NETFramework数据提供程序;使用Connection对象建立与数据源的连接;使用Command对象操作数据源;使用DataReader对象获取操作结果;使用各种数据控件,如DataGridView控件显示数据。12.2.1建立连接在对数据库进行操作之前,必须建立与数据库的连接。1.设置连接字符串Connection对象的ConnectionString属性设置连接字符串连接SQLServer7.0及以上版本数据库,使用SQLServer数据提供程序的SqlConnection对象。典型连接字符串:PersistSecurityInfo=False;IntegratedSecurity=SSPI;database=StudentInfo;server=myServDataSource=myServ;InitialCatalog=StudentInfo;UserID=sa;Password=''DataSource=.\sqlexpress;AttachDbFilename=|DataDirectory|\StudentInfo.mdf;IntegratedSecurity=True要连接OLEDB数据源或SQLServer7.0以前版本数据库,可以使用OLEDB数据提供程序的OleDbConnection对象。典型的连接字符串:Provider=MSDAORA;DataSource=ORACLE8i7;PersistSecurityInfo=False;IntegratedSecurity=yesProvider=Microsoft.Jet.OLEDB.4.0;DataSource=c:\bin\LocalAccess40.mdbProvider=SQLOLEDB;DataSource=myServ;IntegratedSecurity=SSPI使用连接字符串的两种方式:直接将构建好的连接字符串赋值给Connection对象的ConnectionString属性。SqlConnectioncon=newSqlConnection();con.ConnectionString=DataSource=myServ;InitialCatalog=studentInfo;UserID=sa;Password='';将连接字符串保存在App.config文件的connectionStrings配置节中。configurationconnectionStringsaddname=myConnectionconnectionString=DataSource=myServ;InitialCatalog=studentInfo;UserID=sa;Password=''providerName=System.Data.SqlClient//connectionStrings/configuration然后使用ConfigurationManager类动态获取连接字符串stringconStr=ConfigurationManager.ConnectionStrings[myConnection].ConnectionString;SqlConnectioncon=newSqlConnection();con.ConnectionString=conStr;2.打开和关闭连接使用Open方法打开与数据源的连接。在操作完数据库以后,记得使用Close方法关闭与数据源的连接。在建立连接,以及对数据源进行操作时,有可能会导致异常发生,也有可能会产生错误。SqlConnectioncon=newSqlConnection(constr);try{con.Open();……}catch(SqlExceptionex){}//处理异常finally{if(con!=null)con.Close();}//关闭连接12.2.2操作数据使用Command对象完成对数据源的各种操作。1.传递SQL语句使用SQL语句操作数据库中的数据。在操作之前,应该将SQL语句传递给Command对象。使用Command的构造函数SqlCommandcmd=newSqlCommand(select*fromstudent,con);其中,con为Connection对象,用于建立连接。使用CommandText属性SqlCommandcmd=newSqlCommand();cmd.CommandText=select*fromstudent;2.执行查询操作使用Command对象的ExecuteReader方法执行查询操作。它返回DataReader对象,对象中包含查询结果。SqlCommandcmd=newSqlCommand(select*fromstudent,con);SqlDataReaderreader=cmd.ExecuteReader();3.执行编辑操作使用Command对象的ExecuteNonQuery方法执行不返回结果的命令,常用于记录的插入、删除、更新等操作。SqlCommandcmd=newSqlCommand(deletefromstudentwhereno='01105',con);cmd.ExecuteNonQuery();4.使用聚合函数使用Command对象的ExecuteScalar方法获取单一值,常用于SQL语句的聚合函数。SqlCommandcmd=newSqlCommand(selectcount(id)fromstudent,con);intresult=(int)cmd.ExecuteScalar();【例12-1】操作学生数据表P28912.2.3获取操作结果DataReader对象是一个简单的数据集,用于从数据源中检索只读、只向前数据流,并且每次仅返回一条记录。1.生成DataReader对象使用Command对象的ExecuteReader方法生成DataReader对象。SqlCommandcmd=newSqlCommand(select*fromstudent,con);SqlDataReaderreader=cmd.ExecuteReader();2.读取数据组合使用Read方法和相应的Get方法。Read方法移动记录指针。Get方法获取字段值。【例12-2】统计图表P29112.2.4调用存储过程应将Command对象的CommandType属性设置为CommandType.StoredProcedure,同时将CommandText属性设置为存储过程的名字【例12-3】使用存储过程向Student数据表中插入记录P29212.2.5使用参数1.Parameter类的常用属性ParameterName:参数的名字。Value:参数的值。DbType:参数的数据类型。Size:参数的大小。Direction:参数的类型。2.添加参数的方法(1)第一种方法Command对象的Parameters属性是一个参数集合,通过AddWithValue方法可以向参数集合中添加参数。cmd.Parameters.AddWithValue(@no,01105);(2)第二种方法直接生成Parameter对象,然后使用Add方法向Parameters集合添加该对象12.3断开式数据访问12.3.1断开式数据集使用DataSet类表示断开式数据集。与数据集有关的对象有DataTable、DataColumn、Constraint、DataRelation、DataRow。在DataSet类中,有表示数据表集合的Tables属性,也有表示表间关系集合的Relations属性。在DataTable类中,有表示行集合的Rows属性,也有表示数据列集合的Columns属性、表示列间关系集合的ChildRelations和ParentRelations属性。12.3.2填充数据集DataAdapter对象是DataSet对象和数据源间的一个桥梁。12.3.2填充数据集使用DataAdapter的Fill方法,可以把从数据库中获取的数据填充入DataSet或DataTable中。intFill(DataSetdataSet)intFill(DataSetdataSet,stringsrcTable)DataSetds=newDataSet();DataAdapterda=newDataAdapter(SQL,con);da.Fill(ds);da.Fill(ds,student);12.3.3访问数据集1.访问数据表数据集.Tables[表名|索引]DataTabletable=ds.Tables[student];2.访问数据行DataTable.Rows[索引]DataRowrow=ds.Tables[student].Rows[3];3.访问数据列DataRow[列名|索引]或DataRow.Item[列名|索引]stringgender=(string)ds.Tables[student].Rows[3][gender];stringgender=(string)ds.Tables[student].Rows[3].ItemArray[2];4.访问视图使用视图可以排序和筛选数据。(1)创建视图通过DataTable的DefaultView属性,创建与数据表相关的视图。DataViewdv1=ds.Tables[student].DefaultView;使用DataView类的构造函数创建视图。DataViewdv2=newDataView(ds.Tables[student]);(2)排序数据通过DataView的Sor
本文标题:面向对象程序设计第十二章
链接地址:https://www.777doc.com/doc-3373867 .html