软件开发基础(.NET)主讲:邝颖杰电邮:kuangyingjie@163.com1、ADO.NET基础知识数据访问操作的发展采用ODBC(开发式数据互连)数据访问形式。这种访问方式的前提是,只要公司提供某个数据库的数据驱动程序,就可以在程序中对这个数据库操作。但是这种方式只能对结构化数据操作,对于非结构化数据无能为力。采用OLEDB数据访问形式。该方式设计了一个抽象层,由抽象层负责对不同类型的数据提供统一的形式,程序与数据源打交道均经过抽象层。达到了对结构化、非结构化数据均能按统一的方式进行操作。采用ADO数据模型。该模型在OLEDB的基础上又重新设计了访问层,对高级语言编写的程序提供了统一的以“行”为操作目标的数据访问形式。采用ADO.NET数据访问模型。该模型重新整合OLEDB和ADO,并在此基础上构造了新的对象模型。该模型既提供了保持连接的数据访问形式,又提供了松耦合的、以DataSet对象为操作目标的数据访问形式。UDA(UniversalDataAccess)ADO对象OLEDB层面ProviderProvider数据源(SQL)数据源(Access)ADO连接数据库执行SQL指令装载数据集ConnectionADOCommandRecordsetADO.NETConnectionADOADO.NETCommandRecordsetXxxConnectionXxxCommandDataSetXxxTransactionXxxDataReaderXxxDataAdapterADO.NET数据访问模型VS2008开发环境下使用的是ADO.NET2.0。在ADO.NET2.0中,SQL数据提供程序使用统一的SQL数据访问模型实现对各种使用SQL语句的数据库的数据访问支持。例如Oracle、SQLServer、DB2、Access等。ADO.NET体系结构ADO.NET特征面向非连接的分布式数据源集成XML的支持支持企业级多层应用程序开发由经典ADO发展而来,保留了一些经典ADO的组件特性本地的,常驻内存的小型数据库数据集(DataSet).NET数据提供程序数据搬运工单向、只读、只向前翻滚的数据源面向非连接模型EmployeesOrdersCustomersProductsCategoriesCategoriesProductsSqlDataAdapterOleDbDataAdapterSQLServer7.0/2000CustomersOrdersOtherDataBaseDataSetXMLFile需要时才连接应用程序appXmladapter面向连接模型DataSourceConnectionDataReaderCommand读取数据时必须保存稳定的连接而且在每个连接上只能使用一个DataReader应用程序SQLServer数据库的分类1.MicrosoftSQLServer2.MicrosoftSQLServer数据库文件3.MicrosoftSQLServerCompact3.54.本地数据库文件数据访问可视化工具1.服务器资源管理器2.数据集设计器3.数据源本章选用示例数据库数据库MyDatabase.mdf数据表:见P235页定义MyTable1学院编码对照表MyTable2基本情况表MyTable3家庭成员表数据类型说明:char、VarcharNchar、NvarcharDatetimeImage、Binary、VarBinaryText、NText2、ADO.NET数据访问对象ADO.NET常用的对象模型:(1)Connection对象(2)Command对象(3)DataReader对象(4)DataAdapter对象(5)Parameter对象(6)Transaction对象这些对象提供了对数据库的各种不同的访问功能对于不同的数据库,区别仅是前缀不同,例如:SQLServer数据库:SqlConnection、SqlDataAdapterOracle数据库:OracleConnection、OracleDataAdapter1、SqlConnection对象ADO.NET使用SqlConnection对象与SQLServer进行连接。连接字符串的常用形式有两种:(1)使用Windows集成安全身份验证,例如:stringconnectionString=IntegratedSecurity=SSPI;Database=MyDatabase.mdf;Server=localhost;;(2)使用用户名、密码形式,例如:stringconnectionString=“server=localhost;uid=sa;pwd=123;database=MyDatabase.mdf”;但是这种连接方式的安全性不高,比较容易受到黑客的攻击SqlConnection对象(续)如果与SQLServerExpressEdition创建连接,可以直接使用附加数据库名的方式。连接字符串的一般形式为:stringconnectionString=@“DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DatabaseName;+IntegratedSecurity=True;ConnectTimeout=60;UserInstance=True“例如,SqlConnection对象(续)stringconnectionString=@DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDataBase.mdf;+IntegratedSecurity=True;ConnectTimeout=60;UserInstance=True;SqlConnectionconn=newSqlConnection(connectionString);实际上,连接字符串是可以自动生成的。在使用创建数据库之后,系统会自动生成一个连接字符串,并保存到配置文件中例如:Properties.Settings.Default.MyDatabaseConnectionString确定连接字符串后,就可以创建SqlConnection对象SqlConnection对象(续)为了简化书写,还需要在代码中添加对命名空间的引用:usingSystem.Data.SqlClient;可通过连接字符串直接创建SqlConnection对象,例如:SqlConnectionconn=newSqlConnection(connString);或者:SqlConnectionconn=newSqlConnection();conn.ConnectionString=connString;2、SqlCommand对象在ADO.NET中,有两种操作数据库的方式:(1)采用无连接的方式。(2)采用保持连接的方式。不论采用哪种方式,都可以通过SqlCommand对象提供的方法传递对数据库操作的命令,并返回命令执行的结果。SqlCommand对象(续)在保持连接的方式下操作数据库的一般步骤为:1)创建SqlConnection的实例;2)创建SqlCommand的实例;3)打开连接;4)执行命令;5)关闭连接。SqlCommand对象提供了多种完成对数据库操作的方法。常用有:1.ExecuteNonQuery该方法执行SQL语句的结果,但不返回命令执行的表数据,仅返回操作所影响的行数。2.ExecuteReader:返回一个SqlDataReader对象。SqlCommand对象(续)3.ExecuteScaler()该方法用于执行SELECT查询,得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。SQL语句中使用参数SqlParameter对象表示SqlCommand的参数。其中参数名称不区分大小写。使用方法//声明一个参数SqlParameterparameter=cmd.Parameters.Add(@CategoryName,SqlDbType.NVarChar,15);//为参数赋值parameter.Value=Beverages;或者:cmd.Parameters.Add(@CategoryName,SqlDbType.NVarChar,15);cmd.Parameters[“@CategoryName”].Value=Beverages;SqlCommand对象(续)【例9-2】演示SqlCommand对象的用法。3、SqlDataAdapter对象SqlDataAdapter对象通过无连接的方式完成数据库和本地DataSet之间的交互。一般步骤:1)创建SqlConnection的实例;2)创建SqlDataAdapter的实例,需要的话,根据select语句生成其他SQL语句;3)创建DataSet的实例;4)使用Fill方法将数据库中的表填充到DataSet表中;5)利用DataGridView或者其他控件对象编辑或显示数据;6)需要的话,使用Update方法更新数据库。SqlDataAdapter对象(续)SqlDataAdapter对象通过SelectCommand、InsertCommand、UpdateCommand和DeleteCommand属性为后台数据库提供对应的操作命令,并传递需要的参数。一般情况下,只需要提供SELECT语句和连接字符串创建SqlDataAdapter对象,然后利用SqlCommandBuilder对象生成InsertCommand、UpdateCommand和DeleteCommand属性。SqlDataAdapter对象(续)【例】根据选择的表名打开数据库表,并将表中数据通过DataGridView显示出来。设计界面如下:buttonSavedataGridView1buttonOpen4、DataTable对象ADO.NET可以在与数据库断开连接的方式下通过DataSet或DataTable对象进行数据处理,当需要更新数据时才重新与数据源进行连接,并更新数据源。DataTable对象表示保存在本机内存中的表,它提供了对表中行列数据对象的各种操作。可以直接将数据从数据库填充到DataTable对象中,也可以将DataTable对象添加到现有的DataSet对象中。DataTable对象(续)在断开连接的方式下,DataSet对象提供了和关系数据库一样的关系数据模型,代码中可以直接访问DataSet对象中的DataTable对象,也可以添加、删除DataTable对象。DataTable对象(续)【例】自定义一个DataTable对象,直接创建行列信息,并在DataGridView中显示创建的内容。5、DataSet对象1.创建DataSet对象使用创建的DataSet对象可以完成各种数据操作。注意:利用向导生成的数据库数据源是一个强类型的DataSet以及一对或多对强类型的DataTable和TableAdapter的组合。2.填充DataSet对象创建DataSet后,就可以使用SqlDataAdapter对象把数据导入到DataSet对象中,比如通过Fill方法将数据填充到DataSet中的某个表中。3、数据绑定技术数据绑定技术数据绑定是指在程序运行时,窗体上的控件自动将其属性和数据源关联在一起。数据绑定技术是数据操作中使用最频繁的技术,利用数据绑定技术能极大地提高项目开发的效率。简单数据绑定与复杂数据绑定。数据源组件。导航控件。1、简单数据绑定与复杂数据绑定Windows窗体提供了两种类型的数据绑定:简单数据绑定和复杂数据绑定。1.简单数据绑定指将一个控件的某个属性绑定到单个值。这种类型的绑定适用于只显示单个值的控件,一般将这些控件绑定到数据库