《使用ADONET访问数据库》由会员分享,可在线阅读,更多相关《使用ADONET访问数据库(77页珍藏版)》请在金锄头文库上搜索。
1、第第9章章 使用使用ADO.NET访问数据库访问数据库本章讲述的主要内容本章讲述的主要内容9.1 ADO.NET9.1 ADO.NET和数据库通用接口和数据库通用接口9.2 9.2 数据库连接对象数据库连接对象(Connection)(Connection)9.3 9.3 数据库命令对象数据库命令对象(Command(Command) )9.4 9.4 数据读取对象数据读取对象( (DataReaderDataReader) )9.5 9.5 数据适配器对象数据适配器对象( (DataAdapterDataAdapter) )19.1 ADO.NET和数据库通用接口和数据库通用接口9.1.1
2、ADO.NET9.1.1 ADO.NET概述概述 ADO.NETADO.NET是对是对ADOADO的一个跨时代的改进,它们之间有很大的的一个跨时代的改进,它们之间有很大的差别。差别。 ADO.NETADO.NET可通过可通过DateSetDateSet对象在对象在“断开连接模式断开连接模式”下下访问访问数据库。数据库。 访问访问数据库中的数据时,首先要数据库中的数据时,首先要建立连接建立连接,下载数据下载数据到到本地缓冲区,之后本地缓冲区,之后断开断开与数据库的与数据库的连接。连接。 此时此时用户用户对数据对数据的操作的操作( (查询查询、添加、修改、添加、修改、删除等删除等) )都都是是在本
3、地在本地进行进行的。的。 只有只有需要更新需要更新数据库中的数据时,才数据库中的数据时,才再次与数据库连再次与数据库连接接,在发送修改后的数据到数据库,在发送修改后的数据到数据库后关闭后关闭连接连接。29.1 ADO.NET和数据库通用接口和数据库通用接口应用程序访问数据库的传统方式应用程序访问数据库的传统方式9.1.2 数据库通用接口数据库通用接口39.1 ADO.NET和数据库通用接口和数据库通用接口9 9. .1 1. .2 2 数据库通用接口数据库通用接口 美国微软公司提供的数据库通用接口程序,经过了美国微软公司提供的数据库通用接口程序,经过了ODBCOLEDBADOADO.NETOD
4、BCOLEDBADOADO.NET几个发展阶段。几个发展阶段。 1. 1. ODBCODBC通用数据库接口通用数据库接口ODBC(OpenODBC(Open Database Database ConnectivityConnectivity,开放数据库,开放数据库连接连接) ) 开开放放数数据据库库连连接接ODBCODBC是是MicrosoftMicrosoft倡倡导导的的数数据据库库服服务务器器连连接接标标准准,它它向向访访问问各各种种WebWeb数数据据库库的的应应用用程程序序提提供供了了一一种种通通用用的的接接口口。在在此此标标准准支支持持下下,一一个个应应用用程程序序可可以以通通过过
5、一一组组通通用用的的代码实现对各种不同数据库系统的访问代码实现对各种不同数据库系统的访问。 因因为为通通过过ODBCODBC访访问问数数据据库库的的方方式式是是基基于于SQLSQL的的,所所以以各各种种应应用用程程序序均均可可透透过过各各种种数数据据库库所所对对应应的的ODBCODBC驱驱动动程程序序实实现现利利用用SQLSQL语言对不同数据库系统的访问。语言对不同数据库系统的访问。4透过透过ODBC访问数据库的方式访问数据库的方式52. ADO通用数据库接口通用数据库接口 ADO(ActiveX Data Object)是是ASP内内置置的的、用用于于访访问问Web数数据据库库的的Activ
6、eX服服务务器器组组件件,包包含含多多种种对对象象和和集集合合。ADO组组件件对对象象被被包包含含在在ASP脚脚本本程程序序中中,用用来来完完成成与与数数据据库库的的连连接接,并并可可使使用用SQL语言语言对数据库进行各种操作对数据库进行各种操作。 ADO将将绝绝大大部部分分的的数数据据库库操操作作功功能能封封装装在在7个个对对象象及及有有关关的的数数据据集集合合之之中中,通通过过在在ASP脚脚本本程程序序中中调调用用这这些些对对象象和和数数据据集集合合来来执执行行相相应应的的数数据据库操作。库操作。679.1 ADO.NET和数据库通用接口和数据库通用接口9 9. .1 1. .3 3 AD
7、O.NET ADO.NET的数据模型的数据模型 ADO.NETADO.NET采用了层次管理的结构模型,各部分之间的逻辑采用了层次管理的结构模型,各部分之间的逻辑关关系如下图所系如下图所示。示。89.1.4 ADO.NET9.1.4 ADO.NET中的常用对象中的常用对象 9ADONET对象模型由以下几个核心组件组成。对象模型由以下几个核心组件组成。 Connections 连接连接和管理数据库事务。和管理数据库事务。 Commands 向数据库发送的向数据库发送的命令命令。 DataReaders直接直接读取读取流数据。流数据。 Datasets 和和 DataAdapters 对缓存中的数据
8、进行对缓存中的数据进行存储存储和操作和操作。1.Connection对象建立与数据库间的连接中;对象建立与数据库间的连接中;2.Commands对象向数据库提供者发出命令,返回的结果以对象向数据库提供者发出命令,返回的结果以一种流的方式贯穿于这此连接中;一种流的方式贯穿于这此连接中;3.结果集可以用结果集可以用DataReaders 快速地读取,也可以通过快速地读取,也可以通过DataAdapters 对象将数据储存到缓存中的对象将数据储存到缓存中的 Datasets 对象对象中,让用户在数据集中访问和操作记录。中,让用户在数据集中访问和操作记录。 10对SQL数据库而言,连接模式连接模式访问
9、数据库的开发流程有以下几个步骤:创建SqlConnection对象与数据库建立连接建立连接;创建SqlCommand对象对数据库执行执行SQL命令或存储过程命令或存储过程,包括增、删、改及查询数据库等命令;如果查询数据库的数据,则创建SqlDataReader对象读取对象读取SqlCommand命令查询到的结果集结果集,并将查到的结果集绑定到控件上。119.2 数据库连接对象数据库连接对象(Connection)9.2.1 9.2.1 ConnectionConnection对象概述对象概述 ConnectionConnection类提供了对数据源连接的封装。类提供了对数据源连接的封装。类中包
10、类中包括连接方法及描述当前连接状态的属性。括连接方法及描述当前连接状态的属性。 在在ConnectionConnection类中最重要的属性是类中最重要的属性是ConnectionStringConnectionString ( (连接字符串连接字符串) ),该属性用来指定,该属性用来指定数据库数据库服务服务器器名称、数据源信名称、数据源信息及其他登录信息。息及其他登录信息。 ConnectionStringConnectionString中有两个重要的重要的部分:中有两个重要的重要的部分:l字符串内容字符串内容l数据提供程序名称数据提供程序名称。 字符串内容中包含有字符串内容中包含有“Dat
11、aSourceDataSource”( (数据源数据源) )、“Initial CatalogInitial Catalog”(”(默认连接数据库默认连接数据库) )及用于描述用户身份及用于描述用户身份的的“User IDUser ID”和和“PasswordPassword”。12在ADO.NET中,连接数据源有4种数据提供程序种数据提供程序。如果要在应用程序中使用任何一种数据提供程序,必须在后台代码中引用对应的命名空间引用对应的命名空间,类的名称也随之变化类的名称也随之变化。数据访问提供程序名称空间对应的类名称SQL Server数据提供程序System.Data.SqlClientSql
12、Connection;SqlCommand;SqlDataReader;SqlDataAdapterOLE DB数据提供程序System.Data.OleDbOledbConnection;OledbCommand;OledbDataReader;OledbDataAdapterODBC数据提供程序System.Data.OdbcOdbcConnection; OdbcCommand;OdbcDataReader;OdbcDataAdapterOracle数据提供程序System.Data.OracleClientOracleConnection;OracleCommand;OracleDat
13、aReader;OracleDataAdapter139.2 数据库连接对象数据库连接对象(Connection)9.2.2 9.2.2 创建创建ConnectionConnection对象对象SQLSQL数据库的数据库的ConnectionConnection对象:对象:SqlConnectionSqlConnection 连接对象名连接对象名 = new = new SqlConnectionSqlConnection( (连接字符串连接字符串););或:或:SqlConnectionSqlConnection 连接对象名连接对象名 = new = new SqlConnectionSql
14、Connection();(); 连接对象名连接对象名. .ConnectionStringConnectionString = = 连接字符串连接字符串; ;AccessAccess数据库的数据库的ConnectionConnection对象对象OleDbConnectionOleDbConnection 连接对象名连接对象名 = new = new OleDbConnectionOleDbConnection();(); 连接对象名连接对象名. .ConnectionStringConnectionString = = 连接字符串连接字符串; ;149.2 数据库连接对象数据库连接对象(C
15、onnection)9.2.3 9.2.3 ConnectionConnection对象的属性和方法对象的属性和方法1. Connection1. Connection对象的属性对象的属性159.2 数据库连接对象数据库连接对象(Connection)9.2.3 9.2.3 ConnectionConnection对象的属性和方法对象的属性和方法2. 2. ConnectionConnection对象的方法对象的方法16Open方法方法Connection对象的打开操作,任何一个数据库在完成对象的打开操作,任何一个数据库在完成连接之后,即在连接之后,即在访问之前都要先进行打开操作访问之前都要先
16、进行打开操作。打开操作使用打开操作使用Connection对象有关方法来完成,即对象有关方法来完成,即Open方法,其格式为:方法,其格式为:Connection对象名对象名.Open();Close方法方法同样道理,同样道理,在连接使用完成之后,还需要关闭数在连接使用完成之后,还需要关闭数据连接。据连接。关闭操作使用关闭操作使用Connection对象的有关方法来对象的有关方法来完成完成.即即Close方法,其格式为:方法,其格式为:Connection对象名对象名.Close();Sunday, August 11, 2024计算机应用技术系教师专用(ASP.NET程序设计)17Sunda
17、y, August 11, 2024计算机应用技术系教师专用(ASP.NET程序设计)18CreateCommand方法方法CreateCommand方法创建并返回一个与该连接关联方法创建并返回一个与该连接关联的的SqlCommand对象,其格式为:对象,其格式为: Connection对象名对象名.CreateCommand();例如:例如:SqlCommand cmd=conn.CreatCommand();Sunday, August 11, 2024计算机应用技术系教师专用(ASP.NET程序设计)199.2 数据库连接对象数据库连接对象(Connection)9.2.4 9.2.4
18、数据库的连接字符串数据库的连接字符串1. 1. 连接字符串中的常用属性连接字符串中的常用属性20ConnectionString属性通常包含以下参数,各参数间用“;”分隔。Provider:用于设置数据源的OLE DB驱动程序。如:Access为“Microsoft.Jet.OLEDB.4.0”;SQL Server 6.5或之前版本为“SQLOLEDB”。Data Source:设置数据源的实际路径数据源的实际路径。Password:设置登录登录数据库所使用的密码密码。User ID:设置登录登录数据库时所使用的帐号帐号。例如,连接Access数据库的的连接参数为:Provider=Micr
19、osoft.Jet.OLEDB.4.0;Data Source=D:abc.mdb9.2 数据库连接对象数据库连接对象(Connection)9.2.4 9.2.4 数据库的连接字符串数据库的连接字符串1. 1. 连接字符串中的常用属性连接字符串中的常用属性21对于SQL7.0或更高版本的或更高版本的SQL数据库数据库,ConnectionString属性包含的主要参数有:Data Source或或Server:设置需连接的数据库服务器名称。:设置需连接的数据库服务器名称。Initial Catalog或或Database:设置连接的数据库名称。:设置连接的数据库名称。AttachDBFile
20、name:设置附加数据库的路径和文件名。:设置附加数据库的路径和文件名。User ID 或或 uid:登录:登录SQL Server数据库的账户。数据库的账户。Password 或或 pwd:登录:登录SQL Server数据库的密码。数据库的密码。Integrated Security或或Trusted_Connection:是否使用:是否使用Windows集成身份验证,值有三种:集成身份验证,值有三种:true、false和和SSPI,true和和SSPI表示使用表示使用Windows集成身份验证集成身份验证。Connection Timeout:设置:设置SqlConnection对象连
21、接对象连接SQL数数据库服务器的超时时间,单位为秒,若在所设置的时间内无据库服务器的超时时间,单位为秒,若在所设置的时间内无法连接数据库,则返回失败信息。法连接数据库,则返回失败信息。默认为默认为15秒秒。229.2 数据库连接对象数据库连接对象(Connection)9.2.4 9.2.4 数据库的连接字符串数据库的连接字符串2. 2. 连接到连接到SQL SQL ServerServer的连接字符串的连接字符串 通过通过SqlConnectionSqlConnection对象的对象的ConnectionStringConnectionString属性,设置或获取属性,设置或获取连接字符串,
22、连接连接字符串,连接Microsoft SQL Server 7.0Microsoft SQL Server 7.0或更高版本。或更高版本。连接数据库时,有两种验证模式:连接数据库时,有两种验证模式:l标准安全连接标准安全连接l信任连接信任连接(Windows(Windows集成验证模式集成验证模式) )标准安全连接,语法格式为:标准安全连接,语法格式为: Data SourceData Source= =服务器名或服务器名或IP;IP;InitialInitial Catalog Catalog= =数据库名数据库名; ;UserUser IDID= =用户名用户名; ;PasswordPa
23、ssword= =密码密码 或者或者“ServerServer= =服务器名或服务器名或IP;IP;AttachDbFilenameAttachDbFilename= =数据库文件名数据库文件名; ;UidUid= =用户名用户名; ;PwdPwd= =密码密码; ;Trusted_ConnectionTrusted_Connection= =FalseFalse23例如:Data Source =localhost; Initial Catalog=northwind; User Id=sa;pwd=123Data Source =localhost或或(local)表示连接本机SQL数据库
24、的默认服务器。Data Source=.SQLEXPRESS; AttachDbFilename=|DataDirectory|company_Data.mdf; User ID=sa;Password=123;Data Source= .SQLEXPRESS表示SQL Server 2005的SQLEXPRESS数据库服务器数据库服务器;AttachDbFilename表示数据库的路径和文件名。|DataDirectory|表示网站默认数据库路径表示网站默认数据库路径App_Data。标准安全必须在连接字符串中以明文形式保存用户明文形式保存用户名和密码名和密码,因此安全性较差。24信任连接(
25、Windows集成验证模式) 不发送用户名和密码;仅发送用户通过身份验证的信息。仅发送用户通过身份验证的信息。从安全角度考虑,建议使用Windows集成验证模式。 使用Windows集成验证模式的连接参数为: Data Source=服务器名或IP;Initial Catalog=数据库名;Integrated Security=true;或: Data Source =服务器名或IP;AttachDbFilename=数据库文件名; Trusted_Connection=SSPI;例如: Data Source = .SQLEXPRESS; AttachDbFilename= |DataDi
26、rectory|jxgl_Data.MDF; Integrated Security=True; User Instance =True;25如果将数据库放在网站的App_Data目录下。则创建的Student数据库的连接参数应设置为:Data Source=.SQLEXPRESS; AttachDbFilename=|DataDirectory|Student.mdf; Integrated Security=True;User Instance=True其中,|DataDirectory|表示网站默认数据库路径App_Data。269.2 数据库连接对象数据库连接对象(Connection
27、)9.2.4 9.2.4 数据库的连接字符串数据库的连接字符串3. 3. 连接到连接到OLE DBOLE DB数据源的连接字符串数据源的连接字符串 通过通过OleDbConnectionOleDbConnection对象的对象的ConnectionStringConnectionString属性,设置或获属性,设置或获取连接字符串,提供与取连接字符串,提供与OLEOLE DB DB公开数据源的连接或公开数据源的连接或SQL Server 6.xSQL Server 6.x更早版本的连接更早版本的连接。 对于对于OLE OLE DBDB数据提供程序,连接字符串格式中的数据提供程序,连接字符串格式
28、中的ProviderProvider关关键字是必需的键字是必需的,必须为,必须为OleDbConnectionOleDbConnection连接字符串指定提供程连接字符串指定提供程序名称序名称。 到到AccessAccess数据库数据库的连接字符串的连接字符串: : Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Provider=Microsoft.Jet.OLEDB.4.0; Data Source=数据库名数据库名;User;User ID= ID=用户名用户名;Password;Password= =密码密码Provider=Microsof
29、t.Jet.OLEDB.4.0;Data Source= Provider=Microsoft.Jet.OLEDB.4.0;Data Source= | |DataDirectory|Northwind.mdbDataDirectory|Northwind.mdb; ;279.2 数据库连接对象数据库连接对象(Connection)9.2.4 9.2.4 数据库的连接字符串数据库的连接字符串4. 4. 连接字符串的存放位置连接字符串的存放位置(1) (1) 把连接字符串写在程序中把连接字符串写在程序中 要在要在许多页面中写入连接字符串许多页面中写入连接字符串,这时候如果需要改动,这时候如果需要
30、改动连接字符串连接字符串( (比如换用户名和密码比如换用户名和密码) )的话,就得逐个修改。的话,就得逐个修改。(2) (2) 把连接字符串放在把连接字符串放在web.configweb.config文件中文件中 / 29例如:在web.config配置文件的节中添加如下的代码。 30 web.config文件中有了连接字符串后,就可以使用System.Configuration.ConfigurationManager类读取连接字符串。 代码如下:System.Configuration.ConfigurationManager.ConnectionStrings连接字符串名连接字符串名.T
31、oString();例如:string strCnn= ConfigurationManager.ConnectionStringsStudentCnnString.ToString();SqlConnection cnn = new SqlConnection(strCnn);为了使上述代码正常工作,必须引入命名空间为了使上述代码正常工作,必须引入命名空间: using System.Configuration31例例9-19-1:创建并打开SQL Server数据库的连接,并在标签控件中显示当前数据库连接的状态,如图所示。321.1.添加数据库文件,设计添加数据库文件,设计Web.conf
32、igWeb.config文件文件。 找到并删除节,添加新的连接字符串。 2.2.设计设计WebWeb页面。页面。333.3.编写代码编写代码(1)添加添加SQL Server数据库命名空间的引用数据库命名空间的引用: using System.Data; using System.Data.SqlClient; using System.Configuration;(2)声明连接字符串和声明连接字符串和Connection对象对象: string ConnStr = System.Configuration.ConfigurationManager. ConnectionStringsConn
33、String.ToString(); SqlConnection conn = new SqlConnection();(3)页面装入时执行的事件代码: protected void Page_Load(object sender, EventArgs e) conn.ConnectionString = ConnStr; Label1.Text = 当前连接状态: + conn.State.ToString(); 34(4)“连接数据库”按钮的事件代码: protected void ButtonOpen_Click(object sender, EventArgs e) conn.Open
34、(); Label1.Text = 当前连接状态: + conn.State.ToString(); (5)“关闭连接”按钮的事件代码: protected void ButtonClose_Click(object sender, EventArgs e) conn.Close(); Label1.Text = 当前连接状态: + conn.State.ToString(); 359.3 数据库命令对象数据库命令对象(Command)9.3.1 9.3.1 创建创建CommandCommand对象对象1. 1. 使用构造函数创建使用构造函数创建CommandCommand对象对象 下面下面是
35、使用构造函数创建是使用构造函数创建SqlCommandSqlCommand对象,并通过该对象的对象,并通过该对象的构造函数参数来设置特定属性值,其语法格式如下构造函数参数来设置特定属性值,其语法格式如下:SqlCommandSqlCommand 命令命令对象名对象名=new =new SqlCommandSqlCommand( (查询查询字符串字符串, ,连接对象连接对象名名););例如:例如: SqlCommandSqlCommand cmdcmd = new = new SqlCommand(SelectSqlCommand(Select * From * From StudentInfo
36、StudentInfo, , connconn););369.3 数据库命令对象数据库命令对象(Command)9.3.1 9.3.1 创建创建CommandCommand对象对象1.1.使用使用构造函数创建构造函数创建CommandCommand对象对象SqlCommandSqlCommand 命令对象名命令对象名 = new = new SqlCommandSqlCommand();();命令对象名命令对象名.Connection = .Connection = 连接对象名连接对象名; ;命令对象名命令对象名. .CommandTextCommandText = = 查询字符串查询字符串;
37、 ;例如:例如:SqlCommandSqlCommand cmdcmd = new = new SqlCommandSqlCommand();();cmd.Connectioncmd.Connection = = connconn; ;cmd.CommandTextcmd.CommandText = Select * From = Select * From StudentInfoStudentInfo;379.3 数据库命令对象数据库命令对象(Command)2. 2. 使用使用CreateCommandCreateCommand()()方法创建方法创建CommandCommand对象对象使
38、用使用ConnectionConnection对象的对象的CreateCommandCreateCommand()()方法创建方法创建SqlCommandSqlCommand对象对象的语法格式:的语法格式:SqlCommandSqlCommand Command Command对象名对象名=Connection=Connection对象名对象名. .CreateCommandCreateCommand();();CommandCommand对象名对象名. .CommandTextCommandText = = 查询字符串查询字符串; ;例如:例如:SqlCommandSqlCommand cm
39、dcmd = = conn.CreateCommandconn.CreateCommand()(); ;cmd.CommandTextcmd.CommandText = Select * From = Select * From StudentInfoStudentInfo;389.3 数据库命令对象数据库命令对象(Command)例如:例如:通过通过CommandTextCommandText属性执行属性执行SQLSQL语句:语句: string string ConnStrConnStr = = ConfigurationManagerConfigurationManager. . Con
40、nectionStringsConnectionStrings ConnString.ToStringConnString.ToString();(); SqlConnectionSqlConnection connconn = new = new SqlConnection(ConnStrSqlConnection(ConnStr);); string string sqlstrsqlstr = Select * From = Select * From StudentInfoStudentInfo; SqlCommandSqlCommand cmdcmd = new = new SqlCo
41、mmand(sqlstrSqlCommand(sqlstr, , connconn););通过通过CreateCommandCreateCommand方法执行方法执行SQLSQL语句语句 SqlCommandSqlCommand cmdcmd = = conn.CreateCommandconn.CreateCommand();(); cmd.CommandTextcmd.CommandText = = sqlstrsqlstr; ;399.3 数据库命令对象数据库命令对象(Command)3.调用存储过程通过CommandText属性执行存储过程:SqlCommand cmd = new S
42、qlCommand(ProcNameProcName, conn);cmd.CommandTypecmd.CommandType = = CommandType.StoredProcedureCommandType.StoredProcedure; ;或者:SqlCommand command = new SqlCommand();command.Connection = Conn;command.CommandTypecommand.CommandType = = CommandType.StoredProcedureCommandType.StoredProcedure; ;command
43、.CommandTextcommand.CommandText = = ProcNameProcName;409.3 数据库命令对象数据库命令对象(Command)9.3.2 9.3.2 CommandCommand对象的属性和方法对象的属性和方法SqlCommand对象的常用属性对象的常用属性uCommandText:获取或设置要对数据源执行的:获取或设置要对数据源执行的SQL命令、命令、存储过程或数据表名称存储过程或数据表名称uCommandType:获取或设置命令类型,可取的值:获取或设置命令类型,可取的值:lCommandType.Text:SQL命令,默认为命令,默认为TextlCo
44、mmandType.StoredProduce:存储过程:存储过程lCommandType.TableDirect:数据表名称:数据表名称uConnection:获取或设置:获取或设置SqlCommand对象所使用的数据对象所使用的数据连接属性连接属性uParameters:SQL命令参数集合命令参数集合uTransaction:设置:设置Command对象所属的事务对象所属的事务419.3 数据库命令对象数据库命令对象(Command)9.3.2 9.3.2 CommandCommand对象的属性和方法对象的属性和方法lCancel:取消SqlCommand对象的执行lCreateParam
45、eter:创建Parameter对象lExecuteNonQuery:返回数据表被影响的行数。该方法只能只能执行执行Insert、Update和和Delete命令命令。lExecuteReader:返回DataReader对象。该方法用于执行返回执行返回多条记录的多条记录的Select命令。命令。lExecuteScalar:以object类型返回结果表第一行第一列的值。该方法一般用来执行查询单值的查询单值的Select命令命令lExecuteXmlReader:返回返回XmlReader对象对象。该方法以XML文档格式返回结果集421. ExecuteScalar方法ExecuteScala
46、r方法一般用来执行查询单值的Select命令,它以object类型返回结果表第一行第一列的值。Command对象名.ExecuteScalar();对数据库操作时,具体步骤如下:创建SqlConnection对象,设置连接字符串;创建SqlCommand对象,设置它的Connection和CommandText属性;打开与数据库连接打开与数据库连接;使用SqlCommand对象的ExecuteScalar方法方法执行CommandText中的命令;并返回结果表第一行第一列的值供应用程序使用。关闭与数据库连接关闭与数据库连接;43例例9-29-2:使用ExecuteScalar方法返回表中的记录
47、总数,如图所示。1.添加SQL Server数据库命名空间的引用: using System.Data; using System.Data.SqlClient; using System.Configuration;442. 页面装入时执行的事件代码:protected void Page_Load(object sender, EventArgs e) string ConnStr = ConfigurationManager.ConnectionStringsConnString.ToString(); int count = 0; SqlConnection conn = new Sq
48、lConnection(ConnStr) string SqlStr = Select Count(*) From 产品; SqlCommand cmd = new SqlCommand(SqlStr, conn); conn.Open(); count = (int)cmd.ExecuteScalar(); conn.Open(); Response.Write(数据库中记录总数为: + count.ToString(); 452.ExecuteNonQuery方法ExecuteNonQuery方法执行指定的命令,但不返回任何结果。用来执行Insert、Update和Delete命令,因此可
49、以增加、修改和删除数据库中的数据。 Command对象名. ExecuteNonQuery();例如:SqlCommand cmd = new SqlCommand(INSERT INTO titles(title_id, title, type, pubdate) VALUES(JP101, Programming Microsoft .NET, bussiness, May 2002), conn);cmd.ExecuteNonQuery();SqlCommand cmd = new SqlCommand(UPDATE titles SET title_id= JP2002 WHERE t
50、itle_id = JP1001, conn);cmd.ExecuteNonQuery();SqlCommand cmd = new SqlCommand(DELETE FROM titles WHERE title_id = JP202, conn);cmd.ExecuteNonQuery();463.ExecuteReader方法ExecuteReader方法执行指定的命令,并返回一个读写器对象返回一个读写器对象SqlDataReader。Command对象名. ExecuteReader(); SqlDataReader对象是一个向前只读的记录指针,用于快速向前只读的记录指针,用于快速读
51、取数据。读取数据。对于只需要顺序显示数据表中记录的应用而言,SqlDataReader对象是比较理想的选择。 在读取数据时,它需要与数据源保持实时连接与数据源保持实时连接,以循环的方式读取结果集中的数据。 SqlDataReader对象不能直接实例化,而必须调用对象不能直接实例化,而必须调用SqlCommand对象的对象的ExecuteReader方法才能创建有效的方法才能创建有效的SqlDataReader对象。对象。 SqlDataReader对象一旦创建,即可通过对象的属性、方法访问数据源中的数据。47例例9-39-3:使用ExecuteReader()方法,将查询返回值显示到GridV
52、iew控件中,如图所示。1.添加SQL Server数据库命名空间的引用: using System.Data; using System.Data.SqlClient; using System.Configuration;482.设置到JXGL数据库的连接字符串 493.“查询”按钮被单击时执行的事件代码如下:protected void Button1_Click(object sender, EventArgs e) string ConnStr = ConfigurationManager.ConnectionStrings ConnString.ToString(); SqlCon
53、nection conn = new SqlConnection(ConnStr); SqlCommand cmd = new SqlCommand(, conn); cmd.CommandType = CommandType.Text; cmd.CommandText = select * from 教师表 where 职称=Id and 学历=Name; cmd.Parameters.AddWithValue(Id, TextBox1.Text); cmd.Parameters.AddWithValue(Name, TextBox2.Text); conn.Open(); GridView
54、1.DataSource = cmd.ExecuteReader(); GridView1.DataBind(); conn.Close();509.4 数据读取对象数据读取对象(DataReader)应用程序应用程序 毛毛,毛毛,浙江水专浙江水专,优秀,优秀 毛毛毛毛姓名:姓名:学校:学校: 浙江水专浙江水专成绩:成绩: 优秀优秀使用使用 DataReader 对象对象数数数数 据据据据 库库库库519.4 数据读取对象数据读取对象(DataReader)9.4.1 9.4.1 DataReaderDataReader对象的常用属性及方法对象的常用属性及方法1) 1) FieldCountF
55、ieldCount属性:该属性用来获取当前属性:该属性用来获取当前行中的列数行中的列数,如果,如果未放置在有效的记录集中,则返回未放置在有效的记录集中,则返回0 0,否则返回列数,否则返回列数( (字段数字段数) ),默,默认值为认值为-1-1。2) 2) HasRowsHasRows属性:用来获取属性:用来获取DataReaderDataReader对象中对象中是否包含行是否包含行。3) 3) Read()Read()方法:使用该方法可方法:使用该方法可将将ReaderReader记录指针移到下一行记录指针移到下一行,从而可使用列名或列的次序来访问列的值。如果到了数据表的最从而可使用列名或列
56、的次序来访问列的值。如果到了数据表的最后,则返回一个布尔值后,则返回一个布尔值falsefalse。4) 4) GetValue(intGetValue(int i) i)方法:根据传入的列的索引值,返回当前方法:根据传入的列的索引值,返回当前记录行里记录行里指定列的值指定列的值。52Close()Close()方法方法:关闭:关闭SqlDataReaderSqlDataReader对象。对象。NextResultNextResult()()方法:当返回多个结果集时,使用该方法让方法:当返回多个结果集时,使用该方法让记录指针指向下一个结果集。记录指针指向下一个结果集。GetValues(Obj
57、ectGetValues(Object values) values)方法:该方法会把当前方法:该方法会把当前记录行里所有的数据保存到一个数组记录行里所有的数据保存到一个数组里。可以使用里。可以使用FieldCountFieldCount属性来获知记录里字段的总数,据此定义返回值属性来获知记录里字段的总数,据此定义返回值的数组长度。的数组长度。GetDataTypeName(intGetDataTypeName(int i) i)方法:通过列索引获得列的类型。方法:通过列索引获得列的类型。GetName(intGetName(int i) i)方法:通过列索引获得方法:通过列索引获得列的名称列
58、的名称。综合使用综合使用GetNameGetName和和GetValueGetValue两方法,可以获得数据表里列两方法,可以获得数据表里列名和列的字段。名和列的字段。53使用SqlDataReader对象查询数据库的一般步骤:创建SqlConnection对象,设置连接字符串;创建SqlCommand对象,设置它的Connection和CommandText属性,分别表示数据库连接和需要执行的SQL命令。打开与数据库连接打开与数据库连接;使用SqlCommand对象的ExecuteReader方法方法执行CommandText中的命令;并把返回的结果放在把返回的结果放在SqlDataRead
59、er对象中对象中。通过循环,处理数据库查询结果处理数据库查询结果。逐行读取数据:逐行读取数据:DataReader对象对象.Read()读取某列的数据:读取某列的数据:(type)dataReader对象对象 关闭与数据库连接关闭与数据库连接。 54使用SqlDataReader对象时,应注意以下几点:必须通过通过SqlCommand对象的对象的ExecuteReader()方法,方法,产生产生SqlDataReader对象的实例对象的实例。读取数据时,SqlConnection对象必须处于打开状态。只能按向下的顺序逐条读取记录,不能随机向下的顺序逐条读取记录,不能随机读取读取。且无法直接获知
60、读取记录的总数。SqlDataReader对象管理的查询结果是只读的查询结果是只读的,不能修改。559.4 数据读取对象数据读取对象(DataReader)9.4.2 9.4.2 使用使用DataReaderDataReader对象对象【例例9-49-4】使用使用DataReaderDataReader对象设计一个用户登录身份验证页面,对象设计一个用户登录身份验证页面,页面打开时如图页面打开时如图9-79-7所示,用户在输入了正确的用户名和密码后,所示,用户在输入了正确的用户名和密码后,程序将根据用户级别跳转到不同的页面。程序将根据用户级别跳转到不同的页面。 例例9-49-4561.设计Web
61、页面2.设置对象属性3.设置连接参数 4.添加Access数据库命名空间的引用: using System.Data; using System.Data.OleDb; using System.Configuration; AdminAdmin unameunameupwdupwdulevelulevelzhangzhang1234561234561 1liangliang6543216543210 0wangwangabcdefabcdef0 0zhaozhao1231231231231 1chenchen3213213213211 1575.“登录”按钮被单击时执行的事件代码如下:pro
62、tected void Button1_Click(object sender, EventArgs e) string ConnStr = ConfigurationManager.ConnectionStringsConnString.ToString(); using (OleDbConnection conn = new OleDbConnection(ConnStr) conn.Open(); string StrSQL = select ulevel from Admin where uname= + TextBox1.Text + and upwd= + TextBox2.Tex
63、t + ; OleDbCommand com = new OleDbCommand(StrSQL, conn); OleDbDataReader dr = com.ExecuteReader(); dr.Read(); string UserLevel; 58if (dr.HasRows) UserLevel = drulevel.ToString();else Response.Write(alert(用户名或密码错!);); return;if (UserLevel = 0) Sessionpass = admin; Response.Redirect(default2.aspx); el
64、se Sessionpass = guest; Response.Redirect(default3.aspx); 596.manager.aspx页面装入时执行的事件代码如下: protected void Page_Load(object sender, EventArgs e) this.Title = 管理页面; string IsPass = (string)Sessionpass; if (IsPass != admin) Response.Write(alert(请先登录!);); Response.Redirect(default.aspx); Response.Write(这
65、是管理员页面); 607.guest.aspx页面装入时执行的事件代码如下: protected void Page_Load(object sender, EventArgs e) this.Title = 游客页面; string IsPass = (string)Sessionpass; if (IsPass != guest) Response.Redirect(default.aspx); Response.Write(这是游客页面); 619.5 数据适配器对象数据适配器对象(DataAdapter)9.5.1 9.5.1 DataAdapterDataAdapter对象概述对象概
66、述DataAdapter是一个特殊的类,其作用是数据源与数据源与DataSet对象之间沟通的桥梁对象之间沟通的桥梁。DataAdapter提供了双向的数据传输机制在数据源上执行数据源上执行Select语句,把查询结果集传送到语句,把查询结果集传送到DataSet对象的数据表数据表(DataTable)中中。执行执行Insert、Update和和Delete语句,将更改过的数据语句,将更改过的数据提取并更新回数据源提取并更新回数据源。 629.5 数据适配器对象数据适配器对象(DataAdapter)9.5.2 9.5.2 DataAdapterDataAdapter对象的属性和方法对象的属性和
67、方法常用的创建常用的创建SqlDataAdapterSqlDataAdapter对象的语法格式如下所示对象的语法格式如下所示:SqlDataAdapterSqlDataAdapter 对象名对象名=new =new SqlDataAdapter(SqlStr,connSqlDataAdapter(SqlStr,conn););其中其中: SqlStrSqlStr为为SelectSelect查询语句或查询语句或SqlCommandSqlCommand对象对象 connconn为为SqlConnectionSqlConnection对象对象。639.5 数据适配器对象数据适配器对象(DataAda
68、pter)9.5.2 9.5.2 DataAdapterDataAdapter对象的属性和方法对象的属性和方法1. 1. DataAdapterDataAdapter对象的常用属性对象的常用属性DataAdapterDataAdapter对象的常用属性见表对象的常用属性见表9-69-6。649.5 数据适配器对象数据适配器对象(DataAdapter)9.5.2 9.5.2 DataAdapterDataAdapter对象的属性和方法对象的属性和方法2. 2. DataAdapterDataAdapter对象的常用方法对象的常用方法DataAdapterDataAdapter对象的常用方法见表
69、对象的常用方法见表9-79-7。65DataAdapter对象的常用方法:Fill方法:调用Fill方法会自动执行SelectCommand属性中提供的命令,获取结果集并填充数据集的DataTable对象。其本质是通过执行SelectCommand的Select语句查询数据库,返回DataReader对象,通过DataReader对象隐式地创建DataSet中的表,并填充DataSet中表行的数据。66Update方法调用InsertCommand、UpdateCommand和DeleteCommand属性指定的SQL命令,将将DataSet对象更新到相应的数据源。对象更新到相应的数据源。在U
70、pdate方法中,逐行检查数据表每行的RowState属性值属性值,根据不同的RowState属性,调用不同的调用不同的Command命令更新数据库。命令更新数据库。DataAdapter对象更新数据库示例图如图所示。6768SqlCommandBuilder 对象对象利用利用 SqlCommandBuilder 对象能够自动生成:对象能够自动生成:InsertCommandUpdateCommandDeleteCommandSqlCommandBuilder builder = new SqlCommandBuilder(DataAdapter对象对象);699.5 数据适配器对象数据适配器
71、对象(DataAdapter)9.5.2 DataAdapter对象的属性和方法对象的属性和方法3. DataTable对象对象 DataTable对对象象是是内内存存中中一一个个关关系系数数据据库库表表,可可以以独独立立创创建建也也可以由可以由DataAdapter来填充来填充。 声明一个声明一个DataTable对象的语法格式如下所示对象的语法格式如下所示:lDataTable 对象名对象名 = new DataTable();l对象名对象名.TableName=数据表名数据表名;或或 DataTable 对象名对象名 = new DataTable(数据表名数据表名);例如:创建数据表对
72、象例如:创建数据表对象dtStu,代码如下:,代码如下: DataTable dtStu = new DataTable(); dtStu.TableName=StuInfo;或或 DataTable dtStu = new DataTable(StuInfo);70一个一个DataTable对象创建后,对象创建后,通常需要调用通常需要调用DataAdapter的的Fill()对其进行填充对其进行填充,使,使DataTable对象获得具体的数据集,而不再是一对象获得具体的数据集,而不再是一个空表对象个空表对象。SqlDataAdapter.Fill(DataTable对象);71创建数据库连接
73、对象。创建数据库连接对象。利用数据库连接对象和Select语句创建创建SqlDataAdapter对象对象。利用SqlCommandBuilder对象能够自动生成SqlDataAdapter对象的InsertCommand、UpdateCommand、DeleteCommand属性。 SqlCommandBuilder builder = new SqlCommandBuilder(DataAdapter对象);使用SqlDataAdapter对象的对象的Fill方法把方法把Select语句的查询结果放语句的查询结果放在在DataSet对象的一个数据表中或直接放在一个对象的一个数据表中或直接放
74、在一个DataTable对象中对象中。 SqlDataAdapter.Fill(DataTable对象);对DataTable对象中的数据进行增、删、改操作进行增、删、改操作。修改完成后,通过通过SqlDataAdapter对象的对象的Update方法将方法将DataTable对象中的修改更新到数据库对象中的修改更新到数据库。 SqlDataAdapter.Update();72例例9-5:创建DataTable对象,并将DataTable对象作为GridView控件的数据源,将数据显示在页面中。1.添加SQL Server数据库命名空间的引用: using System.Data; usin
75、g System.Data.OleDb;732.页面装入时执行的事件代码如下:OleDbConnection conn = new OleDbConnection();conn.ConnectionString = Provider=Microsoft.Jet.OleDb.4.0;Data Source= + Server.MapPath(App_Data/student.mdb);string SqlStr = select * from grade;OleDbDataAdapter da = new OleDbDataAdapter(SqlStr, conn); DataTable dt
76、= new DataTable();da.Fill(dt);GridView1.Caption = 曙光学校学生成绩表曙光学校学生成绩表;GridView1.DataSource = dt;GridView1.DataBind(); 74StudentTableidnameclasssex1小菲小菲5女女2小薇小薇3女女3小强小强6男男数据表数据表DataTable数据行集合数据行集合DataRows数据行数据行DataRow数据列集合数据列集合Columns数据列数据列DataColumn9.5 数据适配器对象数据适配器对象(DataAdapter)759.5 数据适配器对象数据适配器对象(
77、DataAdapter)9.5.2 DataAdapter对象的属性和方法4.DataTable对象的常用属性 DataTable对象的常用属性主要有Columns属性、Rows属性和DefaultVIew属性。lColumnsColumns属性属性:获取DataTable对象中表的列集合列集合。lRowsRows属性属性:获取DataTable对象中表的行集合行集合。lNewRowNewRow()()方方法法:创建一个与当前数据表有有相相同同字字段段结结构构的的数数据据行行。lClear()Clear()方法方法:清除表中所有的数据清除表中所有的数据。lDefaultView属性:获取可能包
78、括筛选视图或游标位置的表的自定义视图。lDataSet属性:获取DataTable对象所属的DataSet对象。lPrimaryKey属性:获取或设置数据表的主键。lTableNameTableName属性:获取或设置数据表名。76OleDbConnection conn = new OleDbConnection();conn.ConnectionString = Provider=Microsoft.Jet.OleDb.4.0; Data Source= + Server.MapPath(App_Data/student.mdb);string SqlStr = select * from grade;OleDbDataAdapter da = new OleDbDataAdapter(SqlStr, conn);DataTable dt = new DataTable();OleDbCommandBuilder builder = new OleDbCommandBuilder(da);da.Fill(dt);DataRow MyRow = dt.NewRow();MyRow0 = 200909;MyRow1 = zhangsan;MyRow2 = 男 ;dt.Rows.Add(MyRow);da.Update(dt);77