《使用数据提供程序访问数据库.ppt》由会员分享,可在线阅读,更多相关《使用数据提供程序访问数据库.ppt(49页珍藏版)》请在三一办公上搜索。
1、第10章 使用.NET数据提供程序访问数据库,本章内容:.NET数据提供程序概述,数据库的连接字符串,连接数据库Connection对象,执行数据库命令Command对象,读取数据DataReader对象,数据读取器DataAdapter对象。本章重点:Connection对象,Command对象,DataReader对象。,10.1.NET数据提供程序概述,10.1.1.NET数据提供程序简介,10.1.2 使用.NET对象访问数据库的步骤使用.NET Framework数据提供程序的连接模式的对象,访问数据库的步骤如下:使用Connection对象建立与数据库的连接;使用Command对象
2、执行SQL命令,向数据库索取数据;使用DataReader对象读取Command对象取得的数据;以DataReader对象,利用Web控件以及相应的数据绑定,显示数据;完成读取操作后,关闭DataReader对象;关闭Connection对象。,10.2 数据库的连接字符串,10.2.1 数据库连接字符串的常用参数,10.2.2 连接到SQL Server的连接字符串(1)标准安全连接(Standard Security Connection),也称非信任连接它把登录账户(User ID或Uid)和密码(Password或Pwd)写在连接字符串中。标准安全连接方式的连接字符串的一般形式如下:D
3、ata Source=服务器名或地址;Initial Catalog=数据库名;User ID=用户名;Password=密码“Data Source=MICROSOF-63A313MSSQLSERVER2008;Initial Catalog=StudentDB;User ID=sa;Password=,如果连接本地的SQL Server数据库且定义了实例名,则Server参数也可以写为“.实例名”或“localhost实例名”;如果是远程服务器,则将“.”或“localhost”替换为远程服务器的名称或IP地址。这样,上面写的连接字符串可以改为:Data Source=.MSSQLSERV
4、ER2008;Initial Catalog=StudentDB;User ID=sa;Password=如果SQL Server的IP地址为219.228.171.12:1433,则连接字符串为:Data Source=219.228.171.12,1433实例名;Initial Catalog=数据库名;User ID=用户名;Pwd=密码有关更改sa的密码或更改身份验证模式的方法,请参考附录A。,(2)信任连接(Trusted Connection)SQL Server集成安全性(也称为信任连接)有助于在连接到SQL Server时提供保护,因为它不会在连接字符串中公开用户ID和密码,是
5、对连接进行身份验证的建议方法。对于采用“Windows身份验证模式”的SQL Server 2005/2008,其连接字符串的形式一般如下:Data Source=服务器名或地址;Initial Catalog=数据库名;Integrated Security=True使用Windows集成的安全性验证在访问数据库时安全性更高。如果使用信任连接,则上面连接字符串改为:Data Source=.MSSQLSERVER2008;Initial Catalog=StudentDB;Integrated Security=True,10.2.3 连接到OLE DB数据源的连接字符串下列连接字符串使用J
6、et提供程序连接到Microsoft Access数据库:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Access数据库名.mdb;User ID=用户名;Password=密码请注意,如果数据库未受到保护(默认值),可选择UserID和Password关键字。例如,Access数据库保存路径为D:ExamplesApp_DataStudentDB.mdb StudentDB.mdb,则数据库连接字符串为:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:ExamplesApp_DataStudentDB
7、.mdb如果数据库连接字符串写在程序中,则可使用相对路径,.Server.MapPath()表示当前网站下的路径,则数据库连接字符串为:Provider=Microsoft.Jet.OleDb.4.0;Data Source=+Server.MapPath(App_DataStudentDB.mdb),10.2.4 连接字符串的存放位置1把连接字符串写在程序中2把连接字符串放在web.config文件中(1)web.config文件中连接字符串的常用属性web.config中的关键字遵循camelCase命名约定。ConnectionStrings属性,Connection对象的连接字符串保存
8、在ConnectionString属性中,可以使用ConnectionString属性来获取或设置数据库的连接字符串。在程序中获得连接字符串的方法为:连接字符串名.ToString();如果在程序中引入ConfigurationManager类的命名空间“using System.Configuration;”,则在程序中获得连接字符串的方法可简写为:ConfigurationManager.ConnectionStrings连接字符串名.ToString();,AppSettings属性另外,对于ASP.NET 1.1,可以在ConfigurationManager类中使用AppSettin
9、gs属性,用来获取web.config配置文件中节的数据。中包括两个重要的部分:字符串名key和字符串的内容value。AppSettings是在Visual Studio 2003中常用的方式。在程序中获得连接字符串的方法为:连接字符串名.ToString();,(2)打开和修改web.config文件打开和修改web.config文件的步骤如下。在解决方案资源管理器中,双击web.config文件名。在web.config文件中找到元素中的子元素,如 图10-1所示。删除的后两个字符“/”,使之成为”,这时将自动填充。在与之间输入如下连接字符串(“混合模式”)(见图10-2):注意,要把“
10、服务器名”更换为用户自己的计算机中安装的SQL Server 2005/2008的实例名称。,如果SQL Server 2005/2008采用的是“Windows身份验证模式”,则要把连接字符串改为如下形式:connectionString=Data Source=服务器名;Initial Catalog=StudentDB;Integrated Security=True当SQL Server 2005/2008“账户设置”为“混合模式”时,数据库连接字符串可使用“标准安全连接”或“信任连接”;为“Windows身份验证模式”时,只能使用“信任连接”。所以,读者在练习时要根据需要和SQL S
11、erver 2005/2008的“账户设置”来选择数据库连接字符串。,10.3 连接数据库Connection对象,10.3.1 Connection对象概述Connection对象的功能是创建与指定数据源的连接,并完成初始化工作。它的一些属性描述数据源和用户身份验证。Connection对象还提供一些方法允许程序员与数据源建立连接或者断开连接。使用的Connection对象取决于数据源的类型,随.NET Framework提供的每个.NET Framework数据提供程序都具有一个DbConnection对象。微软提供了4种数据库连接对象:要连接到Microsoft SQL Server 7
12、.0或更高版本,使用SqlConnection对象;要连接到OLE DB数据源,或者连接到Microsoft SQL Server 6.x或更低版本,或者连接到Access,使用OleDbConnection对象;要连接到ODBC数据源,使用OdbcConnection对象;要连接到Oracle数据源,使用OracleConnection对象。,10.3.2 创建Connection对象下面介绍使用Connection对象的构造函数创建SqlConnection对象的语法格式,并通过构造函数的参数来设置Connection对象的特定属性值。语法格式如下:SqlConnection 连接对象名=
13、new SqlConnection(连接字符串);连接对象名:创建的Connection对象的名称。连接字符串:描述要连接的数据库的参数。也可以先使用构造函数创建一个不含参数的SqlConnection对象,以后再通过属性设置连接字符串。这种方法对属性进行明确设置,能够使代码更易理解和调试。其语法格式如下:SqlConnection 连接对象名=new SqlConnection();连接对象名.ConnectionString=连接字符串;,10.3.3 Connection对象的属性和方法1Connection对象的属性,2Connection对象的方法,(1)Open()方法使用Open
14、()方法打开一个数据库连接。为了减轻系统负担,应该尽可能晚地打开数据库。语法格式如下:连接对象名.Open()连接对象名:创建的Connection对象的名称。(2)Close()方法使用Close()方法关闭一个打开的数据库连接。为了减轻系统负担,应该尽可能早地关闭数据库。语法格式如下:连接对象名.Close()注意:如果连接超出范围,并不会自动关闭,而是会浪费掉一定的系统资源。因此,必须在连接对象超出范围之前,通过调用Close()或Dispose()方法,显式地关闭连接。,(3)CreateCommand()方法使用CreateCommand()方法创建并返回一个与该连接关联的Comma
15、nd对象。语法格式如下:连接对象名.CreateCommand()返回值:返回一个Command对象。示例:创建一个连接到SQL Server数据库,SqlConnection对象名为conn的SqlCommand对象cmd。SqlCommand cmd=conn.CreateCommand();,10.3.4 连接到数据库的基本步骤在ADO.NET中连接到数据库的基本步骤如下。根据连接的数据源,添加相应的命名空间,见表10-1。例如,连接SQL Server 2005/2008数据库,则添加命名空间如下:using System.Data;using;/如果连接Access数据库,则改为us
16、ing;using System.Configuration;设置(例如在web.config中)和获取连接字符串。创建一个Connection对象,并设置Connection对象的连接字符串属性(ConnectionString)。使用Command对象。使用Open()方法或Close()方法打开或关闭连接。,【例10-1】本例演示如何创建并打开与SQL Server 7.0或更高版本的数据库的连接。连接第6章创建的SQL Server数据库StudentDB。在Label控件中显示连接字符串和打开、关闭当前数据库的连接状态,页面显示如图10-3所示。设计页面。新建一个ASP.NET网站,
17、向页面中添加一个Label控件。在web.config文件中添加连接字符串。按照如图10-2所示中的代码,在web.config文件中添加连接字符串。编写事件代码。在命名空间区域中添加如下内容:using System.Data;using;using System.Configuration;Default.aspx页面装入时执行的事件过程代码如下:protected void Page_Load(object sender,EventArgs e)string connStr=/获取连接字符串 ConfigurationManager.ConnectionStringsStudentDBC
18、onnectionString.ToString();using(SqlConnection connection=new SqlConnection(connStr)Label1.Text=connStr+;Label1.Text=Label1.Text+connection.State.ToString()+;connection.Open();Label1.Text=Label1.Text+connection.State.ToString();,更改命名空间:using;在web.config文件中更改连接字符串:Default.aspx页面装入时执行的事件过程代码中,修改下面这行:u
19、sing(OleDbConnection connection=new OleDbConnection(connStr),10.3.5 关闭连接建议在使用完连接后一定要关闭连接。如果代码中存在using块,将自动断开连接,发生无法处理的异常。也可以使用适合所使用的提供程序的连接对象的Close()或Dispose()方法。通过在解决方案资源管理器中右击数据库并从快捷菜单中执行“分离”命令,或者在服务器资源管理器中右击数据库并从快捷菜单中执行“关闭连接”命令,可以关闭由Visual Studio占有的连接。当运行或调试Web应用程序时,Visual Studio将自动关闭任何打开的数据库连接。,
20、10.4 执行数据库命令Command对象,10.4.1 Command对象概述根据所用的.Net Framework数据提供程序的不同,Command对象也分为4种:SqlCommand对象、OleDbCommand对象、OdbcCommand对象和OracleCommand对象。在编程时应根据访问的数据源的不同,选用相应的Command对象。,10.4.2 创建Command对象Command对象有两种创建方式。1使用Command对象的构造函数创建Command对象可以使用构造函数创建Command对象。构造函数可以采用可选参数,例如,要在数据源中执行的SQL语句、Connection对
21、象或Transaction对象,分为以下两种情况。(1)执行SQL字符串时的创建SqlCommand对象的构造函数使用构造函数创建SqlCommand对象,并通过该对象的构造函数参数来设置特定属性值,其语法格式如下:SqlCommand 命令对象名=new SqlCommand(SQL字符串,连接对象名);命令对象名:创建的Command对象的名称。例如,下面代码:SqlCommand cmd=new SqlCommand(SELECT*FROM StudentInfo,conn);,也可以先使用构造函数创建一个空Command对象,然后设置属性值。这种方法对属性进行明确设置,能够使代码更易理
22、解和调试。其语法格式如下:SqlCommand 命令对象名=new SqlCommand();/创建一个空的命令对象命令对象名.Connection=连接对象名;/设置连接对象命令对象名.CommandType=CommandType.Text;/定义为使用SQL语句,可省略命令对象名.CommandText=SQL字符串;/定义要执行的SQL语句例如,下面的代码片段在功能上与第一种方法是等效的:SqlCommand cmd=new SqlCommand();/创建一个空的命令对象cmdcmd.Connection=conn;/设置连接对象,conn是前面创建的连接对象名cmd.Command
23、Text=SELECT*FROM StudentInfo;/定义要执行的SQL语句,(2)执行存储过程时的创建SqlCommand对象的构造函数 执行没有参数的存储过程语法格式如下:SqlCommand 命令对象名=new SqlCommand(存储过程名,连接对象名);命令对象名.CommandType=CommandType.StoredProcedure;/定义为使用存储过程或者SqlCommand 命令对象名=new SqlCommand();/创建一个空的Command对象命令对象名.Connection=连接对象名;/设置Command对象的Connection属性命令对象名.Co
24、mmandType=CommandType.StoredProcedure;/定义为使用存储过程,不能省略命令对象名.CommandText=存储过程名;/定义要执行的存储过程的名称然后根据需要选择执行Command对象的Execute方法。,执行有参数的存储过程执行有参数的存储过程,在上面命令后面添加参数即可,语法格式如下:SqlParameter 参数对象1=new SqlParameter(参数名1,Sql数据类型,长度);/添加参数参数对象1.Value=值;/给参数赋值命令对象名.Parameters.Add(参数对象1);/添加参数1,2使用Connection对象的CreateC
25、ommand()方法创建Command对象也可以使用Connection对象的CreateCommand()方法创建用于特定连接的Command对象。Command对象执行的SQL语句可以使用CommandText属性进行配置。使用Connection对象的CreateCommand()方法创建SqlCommand对象的语法格式如下:SqlCommand 命令对象名=连接对象名.CreateCommand();命令对象名.CommandType=CommandType.Text 或.StoredProcedure;/SQL命令或存储过程命令对象名.CommandText=SQL字符串 或 存储
26、过程名;例如,通过Command对象的CommandText属性来执行一条SQL语句,代码如下:string connStr=ConfigurationManager.ConnectionStringsStudentDBConnectionString.ToString();SqlConnection conn=new SqlConnection(connStr);/创建Connection对象:connstring sqlstr=SELECT*FROM StudentInfo;/SQL字符串SqlCommand cmd=new SqlCommand(sqlstr,conn);/创建Comma
27、nd对象,并初始化SQL字符串或者使用Connection对象的CreateCommand()方法,上面的一行代码改为如下两行代码:SqlCommand cmd=conn.CreateCommand();/创建Command对象:cmdcmd.CommandText=sqlstr;/初始化Command对象的SQL字符串,10.4.3 Command对象的属性和方法1Command对象的属性Command对象的常用属性及说明,见表10-7。,2Command对象的方法Command对象的方法统称为Execute方法,常用方法及说明见表10-8。,(1)ExecuteScalar()方法Comm
28、and对象的ExecuteScalar()方法的语法格式如下:命令对象名.ExecuteScalar();private static void CreateCommand(string queryString,string connectionString)SqlConnection connection=new SqlConnection(connectionString);/创建Connection对象 connection.Open();/打开connection对象 queryString=SQL字符串;/创建command对象,并初始化SQL字符串 SqlCommand comma
29、nd=new SqlCommand(queryString,connection);command.ExecuteScalar();/执行Command命令.,【例10-2】使用SqlCommand对象的ExecuteScalar()方法来返回表中记录的数目(SELECT语句使用COUNT聚合函数返回指定表中的行数的单个值)。protected void Page_Load(object sender,EventArgs e)string connString=ConfigurationManager.ConnectionStringsStudentDBConnectionString.ToS
30、tring();Int32 count=0;/统计得到的学生人数 using(SqlConnection conn=new SqlConnection(connString)/创建Connection对象conn string sqlstr=SELECT COUNT(*)FROM StudentInfo;/SQL字符串/创建Command对象ordersCMD,并初始化SQL字符串 SqlCommand ordersCMD=new SqlCommand(sqlstr,conn);try conn.Open();count=(Int32)ordersCMD.ExecuteScalar();/将返
31、回的记录数强制转换成整型 catch(Exception ex)/捕捉错误 Response.Write(ex.Message);/显示出错信息 Response.Write(学生总数为+count.ToString()+人!);/显示“学生总数为XX人!”,(2)ExecuteNonQuery()方法Command对象的ExecuteNonQuery()方法的语法格式如下:命令对象名.ExecuteNonQuery();以下代码示例执行一个INSERT语句,然后使用ExecuteNonQuery()方法将一个记录插入数据库中。connection.Open();/假设连接是一个有效的SqlC
32、onnectionstring queryString=INSERT INTO StudentInfo+(StudentID,StudentName)Values(200902602030,白雪);SqlCommand command=new SqlCommand(queryString,connection);Int32 recordsAffected=command.ExecuteNonQuery();/执行方法并保存受影响的记录个数,(3)ExecuteReader()方法Command对象的ExecuteReader()方法(即创建SqlDataReader对象)的语法格式如下:Sql
33、DataReader数据阅读器对象名=命令对象名.ExecuteReader();数据阅读器对象名:是创建的DataReader对象的名称。,创建一个SqlCommand对象,然后使用ExecuteReader()方法创建DataReader对象来对数据源进行读取,代码如下:private static void CreateCommand(string queryString,string connectionString)SqlConnection connection=new SqlConnection(connectionString);/创建Connection对象 connecti
34、on.Open();/打开Connection对象 queryString=SQL字符串;/创建command对象,并初始化SQL字符串 SqlCommand command=new SqlCommand(queryString,connection);/通过ExecuteReader()方法创建DataReader对象 SqlDataReader reader=command.ExecuteReader();while(reader.Read()Response.Write(reader0+reader1+reader2+);/显示第1、2、3列,10.5 读取数据DataReader对象,
35、创建用于SQL Server的SqlDataReader对象的语法格式如下:SqlDataReader 数据阅读器对象名=命令对象名.ExecuteReader();或者先创建DataReader对象的实例,然后再调用Command对象的ExecuteReader()方法,并把返回的DataReader对象赋值给DataReader对象的实例,语法格式如下:SqlDataReader 数据阅读器对象名;数据阅读器对象名=Command对象名.ExecuteReader();DataReader对象名:创建的DataReader对象的名称。,10.5.3 DataReader对象的属性和方法1D
36、ataReader对象的属性,2DataReader对象的方法,(1)Read()方法Read()方法的语法格式如下:数据阅读器对象名.Read()返回值:如果存在多个行,则为True;否则为False。,10.5.4 关闭DataReader对象实例中相应的代码如下:myDataReader.Close();myConnection.Close();,10.6 数据适配器DataAdapter对象,下面以创建SqlDataAdapter对象为例,介绍使用DataAdapter类的构造函数创建DataAdapter对象的方法,有以下几种。初始化SqlDataAdapter类的新实例。SqlDa
37、taAdapter数据适配器对象名=new SqlDataAdapter();数据适配器对象名:创建的DataAdapter对象的名称。将指定的SqlCommand对象作为SelectCommand属性,初始化SqlDataAdapter类的新实例。SqlDataAdapter数据适配器对象名=new SqlDataAdapter(SqlCommand对象名或SelectCommand字符串);用SelectCommand字符串和SqlConnection对象初始化SqlDataAdapter类的新实例。SqlDataAdapter数据适配器对象名=new SqlDataAdapter(Sel
38、ectCommand字符串,SqlConnection对象名);,用SelectCommand字符串和一个连接字符串初始化SqlDataAdapter类的新实例。SqlDataAdapter数据适配器对象名=new SqlDataAdapter(SelectCommand字符串,Connection字符串);如果创建的DataAdapter对象与SqlConnection、SqlCommand对象没有建立关联,则采用如下方式:SqlDataAdapter数据适配器对象名=new SqlDataAdapter();/创建一个空DataAdapter对象/DataAdapter对象与SqlConn
39、ection、SqlCommand对象建立关联数据适配器对象名.SelectCommand=new SqlCommand(SqlCommand对象名,SqlConnection对象名);,10.6.3 DataAdapter对象的属性和方法1DataAdapter对象的属性,2DataAdapter对象的方法,(1)填充数据集使用DataAdapter对象填充数据集需要以下4个步骤。创建数据库连接对象(Connection对象)。定义从数据库查询数据用的Select SQL语句。利用、中创建的Connection对象和Select SQL语句,创建DataAdapter对象:SqlDataAd
40、apter da=new SqlDataAdapter(Select SQL语句,Connection对象);调用DataAdapter对象的Fill()方法填充数据集,语法格式如下:数据适配器对象名.Fill(数据集对象名,数据表名称字符串);如果数据集中没有“数据表名称字符串”这个数据表,则调用Fill()方法后会创建该数据表。如果数据集中已经有这个数据表,则把现在查出的数据添加到该数据表中。,(2)保存数据集中的数据就像查询数据需要使用查询命令一样,在更新数据时也需要有相关的命令。使用SqlCommandBuilder对象(构造SQL命令)可以自动生成需要的SQL命令。这样,把数据集中修
41、改过的数据保存到数据库中,只需要以下两个步骤。使用SqlCommandBuilder对象为DataAdapter对象自动生成更新命令,语法格式如下:SqlCommandBuilder 对象名=new SqlCommandBuilder(数据适配器对象名);对象名:实例化一个SqlCommandBuilder类对象的名称。数据适配器对象名:已创建的数据适配器对象名。调用DataAdapter对象的Update()方法更新数据库,语法格式如下:数据适配器对象名.Update(数据集对象名,数据表名称字符串),10.7 实训,实训目的1)掌握使用.NET对象访问数据库的步骤。2)掌握Connection对象、Command对象、DataReader对象的使用方法。实训内容,