使用ADO.NET进行数据库访问一、ADO.NET的基本组件•1.定义•ADO.NET是.NETFramework架构中一组用于数据操作的类。它提供了为非连接环境设计的系统、高级XML支持的编程模型和在Microsoft.NET框架内用于数据访问的类、接口、结构和枚举类型。•ADO.NET组件主要分为两大类:•(1)数据存取:DataSet类,独立于不同数据源的数据存取服务组件。•(2)数据操作:.NETFrameworkDataProvider和NETFramework的数据提供者,包含有四个核心组件:Connection对象、Command对象、DataReader对象和DataAdapter对象。DatabaseXMLADO.NET架构图2.ADO.NET对象概述•Connection对象:建立到数据源的连接•Command对象:允许你查询数据库、向它发送命令或者调用它的存储过程。•DataReader对象:是Command对象的ExecuteReader方法返回的对象,它代表只向前的、只读的结果集。•DataAdapte对象:起着Connection对象和DataSet对象之间的桥梁作用。•DataSet对象:是ADO.NET非连接架构下的主要对象。它在使用时就像驻留在客户端计算机上的一个小型关系数据库,但又与任何具体的数据库完全无关。.NET框架包括许多 .NETDataProvider,例如SQLServer.NETDataProvider,OLEDB.NETDataProviderforSQL和OLEDBProviderforMicrosoftJet等。你也可以为任意数据源编写自定义的.NETDataProvider。3.ADO.NET组件的命名空间结构•SQLServer数据提供组件:支持SQLServer7.0或更高版本,属于System.Data.SqlClient命名空间。•OLEDB数据提供组件:访问如Access、Oracle等数据源。•上面两种数据提供组件,都实现了Connection对象、Command对象、DataReader对象和DataAdapter对象的模型表一两种数据提供组件中的对象ADO.NET数据提供组件SQLServerOLEDBConnectionSqlConnectionOleDbConnectionCommandSqlCommandOleDbCommandDataAdapterSqlDataAdapterOleDbDataAdapterDataReaderSqlDataReaderOleDbDataReader表二System.Data的几个常见的子类类名称功能说明DataSet内存中的高速缓存数据DataTable内存中数据的一个表格DataView内存中数据的一个视图DataRowDataTable中的数据列DataTableCollectionDataSet中的表格集合DataRowCollectionDataTable中的数据行的集合DataColumnDataTable中的字段的模式描述DataException使用ADO.NET时产生的异常•使用VisualStudio2005创建程序时,系统将默认应用System.Data.dll组件。因此,不需要再添加对System.Data的引用,直接在程序中使用using把命名空间导入即可•UsingSystem.Data•UsingSystem.Data.Sqlclint二、使用ADO.NET•在ADO.NET中使用数据库,需要执行下列步骤:(1)连接到数据库。(2)请求特定的数据。确定想要检索的数据以及需要对它进行访问的方式是只读访问还是读/写访问。(3)检索并显示数据。(4)关闭连接(在某些应用程序中)。(5)修改检索得到的数据(如果有读/写访问权限)。(6)重新打开连接(在某些应用程序中)。(7)将对数据所做的所有更改都传回数据库。(8)关闭连接。•1、使用Connection对象(1)选择SqlConnection对象SqlConnection位于System.Data.SqlClient命名空间下:UsingSystem.Data.Sqlclint属性功能说明ConnectionString获取或设置打开SQLServer的连接字符串ConnectionTimeOut获取尝试建立连接的等待时间Database获取目前连接的数据库名称DataSource获取SQLServer实例的名称ServerVersion获取SQLServer实例的版本State获取目前SqlConnection的连接状态方法功能说明Close关闭SQLServer数据库的连接Open打开SQLServer数据库的连接表三SqlConnection属性和方法(2)指定数据源:在选择了连接对象类型之后,可以使用Connection对象ConnectionString属性来指定DataProvider、数据源和其他用于建立连接的信息。(3)设置ConnectionString属性ConnectionString是Connection对象的关键属性,它是一个字符串,用于定义正在连接的数据库的类型、位置以及其他属性,这些属性用分号分隔。• Provider特性:它指定用于连接到数据的OLEDBProvider的名称(SqlProvider不需要)• DataSource特性:它指定数据库的位置,既可以是Access数据库的路径,也可以是SQLServer或Oracle数据库所在计算机的名称。• UserID和Password特性:它们指定用户名和该数据库的有效帐户密码。• InitialCatalog特性:当连接到SQLServer或Oracle数据源时,它指定数据库的名称。•IntegratedSecurity特性:SQLServer的整合安全性。若为True,则用Windows帐户进行验证;若为False,则需要在连接时指定用户名和密码。•例:stringconstr=DataSource=stu100\\SQLEXPRESS;InitialCatalog=db;IntegratedSecurity=true“;SqlConnectioncn=newSqlConnection();cn.ConnectionString=constr;cn.open();或者:stringconstr=DataSource=stu100\\SQLEXPRESS;InitialCatalog=db;IntegratedSecurity=true“;SqlConnectioncn=newSqlConnection(constr);cn.open();以上数据库是windows身份验证登录的。stringconstr=DataSource=(local);UserID=sa;Password=41919;InitialCatalog=db;;SqlConnectioncn=newSqlConnection(constr);cn.Open();以上数据库是SQLSEVER身份验证登录的。•4.打开和关闭连接•如前所述,Open方法和Close方法不带参数:cn.open();cn.close();5、State属性和StateChange事件(1) State属性:指示数据库连接的当前状态。它可以是下列ConnectionState枚举值中一个或者多个值的组合:Closed、Connecting、Open、Executing、Fetching和Broken。通常情况下,需检查State属性以确保打开一个关闭着的连接或者关闭一个已打开的连接,如下列代码所示://如果连接已打开,关闭该连接if(cn.State==ConnectionState.Open)cn.Close();;需要注意的是,当连接不再需要时,应该及时把它关闭,以免占用过多的数据库连接资源。(2)StateChange事件是当State属性发生改变时触发的,经常用在“当数据库连接对象的连接状态发生改变时”,可以对连接对象进行及时处理。•【例1】使用控制台程序建立对SQLServer的连接。•usingSystem;•usingSystem.Data.SqlClient;•usingSystem.Data;•classTestConnection•{•staticvoidMain()•{•SqlConnectioncn=newSqlConnection();•//创建一个连接对象•try•{•stringconstr=DataSource=stu100\\SQLEXPRESS;InitialCatalog=northwind;IntegratedSecurity=true“;cn.ConnectionSing=constr;//设置连接字符串•cn.Open();•Console.WriteLine(连接已打开);•}••catch(SqlExceptione){•Console.WriteLine(e.Message);•}•finally•{•if(cn.State!=ConnectionState.Closed)//判断连接状态•{•cn.Close();•Console.WriteLine(连接已关闭);•}•}•}•模仿案例,在控制台中实现数据库的连接与关闭。•2使用Command对象•创建一个Command对象,该对象包含一个选择查询(从数据库读取数据)或者一个操作查询(更新数据),然后执行Executexxx方法(确切的名称取决于查询的类型)。Command对象按数据库类型也分为两大类:SqlCommand用于执行SQLServer中的命令表3SqlCommand的属性和方法属性功能说明CommandText获取或设置要对数据源执行的SQL语句或存储过程CommandTimeout获取或设置在终止执行命令的尝试并生成错误之前的等待时间CommandType获取或设置一个值,该值指示如何解释CommandText属性Connection获取或设置SqlCommand实例使用的SqlConnection对象Parameters获取SqlParameterCollection方法功能说明Cancel试图取消SqlCommand的执行ExecuteNonQuery对连接执行SQL语句并返回受影响的行数ExecuteReader将CommandText发送到当前的Connection并生成一个SqlDataReader对象ExecuteScalar执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行CreatePareameter创建SqlParameter对象的新实例•【2】使用Windows程序操作SQLServer数据库,步骤如下:•(1)首先创建一个WinForm程序,对窗体Form1的设计界面如图10-10所示。••(2)导入所需的命名空间,然后在代码区定义成员变量及方法。•SqlConnectioncn=newSqlConnection(DataSource=stu100\\SQLEXPRESS;InitialCatalog=northwind;IntegratedSecurity=true);•SqlCommandcmd=newSqlCommand();•(3)在【添加记录】按钮的Click事件中添加如下代码:•privatevoidbutton1_Click(objectsender,EventArgse)•{•stringkhh,gsm,xm;•khh=textBox1.Text;•gsm=textBox2.Text;•xm=textBox3.Text;•try•{•if(cn.State==ConnectionState.Closed)•cn.Open();•if(checkSame(khh)==false•{•MessageBox.Show(存在相同