数据库访问技术_第1页
数据库访问技术_第2页
数据库访问技术_第3页
数据库访问技术_第4页
数据库访问技术_第5页
已阅读5页,还剩139页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1/144第十四章 ADO.NET数据库访问技术数据库应用在程序设计中占用重要的地位。数据库应用在程序设计中占用重要的地位。C#通过通过ADO.NET来支持对数据库的操作。来支持对数据库的操作。主讲:周宇葵高级程序设计语言2/144目录n数据库概述nADO.NET概述n数据库的连接n直接访问模式n数据集模式n参数查询与存储过程调用n图像的读取和保存(*)高级程序设计语言3/14414.1 数据库概述14.1.1 关系数据库的基本结构关系数据库的基本结构1. 表(关系):二维表表(关系):二维表2. 记录(元组):表中的一行记录(元组):表中的一行3. 字段(属性):表中的一列字段(属性):表中

2、的一列4. 存储过程:存放在数据库中,由服务器端执行的存储过程:存放在数据库中,由服务器端执行的一段预先定制的一段预先定制的SQL 程序程序高级程序设计语言4/144FSQL SERVER样例数据库:xsglstudent表表字段字段/属性属性字段名字段名/属性名属性名记录记录/元组元组高级程序设计语言5/144course表表高级程序设计语言6/144score表表高级程序设计语言7/14414.1.2 结构化查询语言(SQL)1.SQL语言的主要组成语言的主要组成数据定义语句:数据定义语句:CREATE 、DROP数据操纵语句:数据操纵语句:INSERT、UPDATE、DELETE 数据查

3、询语句:数据查询语句:SELECT高级程序设计语言8/1442.数据定义语句数据定义语句 CREATE语句语句 格式:格式:CREATE TABLE 表名表名(列名列名1 数据类型数据类型1 NOT NULL ,列名列名2 数据类型数据类型2 NOT NULL); 例:给出建立一个学生表例:给出建立一个学生表student的的SQL语句。语句。 CREATE TABLE student(studID int NOT NULL ,studName varchar(50),studSex varchar(50),studAddress varchar(50),enterScore decimal(

4、5, 2); DROP语句语句 格式:格式:DROP TABLE 表名表名; 例:给出删除学生表例:给出删除学生表student的的SQL语句。语句。 DROP TABLE student高级程序设计语言9/1443.数据操纵语句数据操纵语句 INSERT语句语句 格式:格式:INSERT INTO 表名表名(列名列名1 ,列名列名2,) VALUES (表达式表达式1 ,表达式表达式2,) 例:给出向例:给出向score表中插入记录的表中插入记录的SQL语句。语句。INSERT INTO score VALUES(7010101,70101,88)INSERT INTO score VALU

5、ES(7010101,70102,88) UPDATE语句语句 格式:格式:UPDATE 表名表名 SET 列名列名1=表达式表达式1 , SET 列名列名2=表达式表达式2 WHERE 条件表达式条件表达式 例:将例:将score表中所有选修了表中所有选修了“70101”课程的学生的分数加课程的学生的分数加1分。分。UPDATE score SET score=score+1 WHERE courseID=70101高级程序设计语言10/144DELETE语句语句 格式:格式:DELETE FROM 表名表名 WHERE 条件表达式条件表达式 例:将例:将score表中学号为表中学号为“70

6、10106”的学生的选课记录删除。的学生的选课记录删除。DELETE FROM score WHERE 学号学号=70101064.数据查询语句数据查询语句 格式:格式:SELECT 字段表字段表 FROM 表名表名 WHERE 条件表达式条件表达式 GROUP BY 分组字段分组字段 HAVING 分组输出条件表达式分组输出条件表达式 ORDER BY 字段字段ASC|DESC 注:注:“字段表字段表”中可使用中可使用聚合函数聚合函数对记录进行统计,它返回一对记录进行统计,它返回一组记录的单一值;组记录的单一值;“查询条件查询条件”由常量、字段名、逻辑运算由常量、字段名、逻辑运算符(符(AN

7、D、OR)、)、关系运算符关系运算符等组成。等组成。高级程序设计语言11/144聚合函数聚合函数说明说明AVG返回特定字段中值的平均数返回特定字段中值的平均数COUNT返回选定记录的个数返回选定记录的个数SUM返回特定字段中所有值的总和返回特定字段中所有值的总和MAX返回特写字段中的最大值返回特写字段中的最大值MIN返回特定字段中的最小值返回特定字段中的最小值符号符号说明说明、=大于、大于等于大于、大于等于=、等于、不等于等于、不等于BETWWEN 值值1 AND 值值2在两数值之间在两数值之间IN在一组值中在一组值中LIKE与一个字符串表达式匹配与一个字符串表达式匹配聚合函数聚合函数关系运算

8、符关系运算符高级程序设计语言12/144例例:在在student表查询所有学生记录。表查询所有学生记录。SELECT * FROM student;例例:查询查询student表所有男生记录。表所有男生记录。SELECT * FROM student WHERE studSex=男男;例例:查询所有选课学生的学号、姓名、课程名和分数。查询所有选课学生的学号、姓名、课程名和分数。SELECT student.studID,studName,CourseName,scoreFROM student,course,scoreWHERE student. studID=score. studID AN

9、D course.courseID=score. courseID;例例:查询所有选课学生的学号、姓名、课程名和分数,并要求按查询所有选课学生的学号、姓名、课程名和分数,并要求按课程名排序。课程名排序。SELECT student. studID, studName, CourseName,scoreFROM student, course,scoreWHERE student. studID=score. studID AND course.courseID=score. courseIDORDER BY CourseName;高级程序设计语言13/144例例:查询分数在查询分数在8090的

10、学生的学号、姓名、课程名和分数。的学生的学号、姓名、课程名和分数。SELECT student.studID, studName,CourseName,scoreFROM student,course,scoreWHERE student.studID =score.studID AND score.courseID=course.courseID AND (score between 80 and 90);例例:查询每门课程的平均分。查询每门课程的平均分。 SELECT CourseName,AVG(score) AS 平均分平均分 FROM score,course WHERE cours

11、e. courseID=score. courseID GROUP BY course. CourseName高级程序设计语言14/14414.2 ADO.NET概述nADO.NET是是 .NET Framework 中不可缺少的一部分。中不可缺少的一部分。nADO.NET(ActiveX Data Objects) 是是一组一组向向 .NET 程序员公程序员公开数据访问服务的开数据访问服务的类类。n在在ADO.NET中,通过数据提供程序所提供的应用程序编程中,通过数据提供程序所提供的应用程序编程接口(接口(API-Application Programming Interface),可以轻)

12、,可以轻松地松地访问数据资源访问数据资源,包括关系数据、可扩展的标识语言,包括关系数据、可扩展的标识语言(XML-eXtensibleMarkupLanguage )和应用程序数据。)和应用程序数据。nADO.NET 支持多种开发需求支持多种开发需求,包括创建由应用程序、工具、,包括创建由应用程序、工具、语言或语言或 Internet 浏览器使用的前端数据库客户端和中间层浏览器使用的前端数据库客户端和中间层业务对象。业务对象。 高级程序设计语言15/14414.2.1 ADO.NET对象模型ADO.NET体系结构高级程序设计语言16/1441. .NET Framework 数据提供程序数据提

13、供程序功能:功能:.NET Framework 数据提供程序用于数据提供程序用于连接连接到数据库到数据库、执行命令执行命令和和检索结果检索结果。 类型:类型:.NET Framework 提供了提供了四四个个 .NET Framework 数据提供程序:数据提供程序: SQL Server .NET Framework 数据提供程序数据提供程序 OLE DB .NET Framework 数据提供程序数据提供程序 ODBC .NET Framework 数据提供程序数据提供程序 Oracle .NET Framework 数据提供程序数据提供程序 14.2.1 ADO.NET对象模型高级程序设

14、计语言17/144FADO.NET的数据提供程序提供程序命名空间核心对象注释SQL Server数据提供程数据提供程序序System.Data.SqlClientSqlConnection、SqlCommand、SqlDataReader、SqlDataAdapter仅支持仅支持Microsoft SQL Server 7.0或更或更高版本高版本OLE DB数数据提供程序据提供程序System.Data.OleDbOleDbConnection、OleDbCommand、OleDbDataReader、OleDbDataAdapter用于用于OLE DB数据源,数据源,支持支持SQL Serv

15、er、Oracle、Access等等ODBC数据数据提供程序提供程序System.Data.OdbcOdbcConnection、OdbcCommand、OdbcDataReader、OdbcDataAdapter用于用于ODBC数据源,数据源,支持支持Paradox、 Excel、Mysql等等Oracle数据数据提供程序提供程序System.Data.OracleClientOracleConnection、OracleCommand、OracleDataReader、OracleDataAdapter适用于适用于Oracle数据源数据源支持支持Oracle客户端软客户端软件件8.1.7版

16、或更高版版或更高版本本高级程序设计语言18/1442.DataSetnDataSet 对象是支持对象是支持 ADO.NET 的的断开式(独断开式(独立存在)、分布式数据方案的核心对象立存在)、分布式数据方案的核心对象。n它可以用于多个不同的数据源,数据库、它可以用于多个不同的数据源,数据库、 XML 数据,或用于管理应用程序本地的数据。数据,或用于管理应用程序本地的数据。nDataSet 是数据的是数据的内存驻留内存驻留表示形式,无论数表示形式,无论数据源是什么,它都会提供据源是什么,它都会提供一致的关系编程模型一致的关系编程模型。nDataSet 结构类似于关系数据库,是包括相关结构类似于关

17、系数据库,是包括相关表、约束和表间关系在内的整个数据集。表、约束和表间关系在内的整个数据集。 高级程序设计语言19/144FDataSet对象模型高级程序设计语言20/144 ADO.NET提供两种数据访问模式:直接访问模提供两种数据访问模式:直接访问模式(连接)和数据集模式(非连接)。式(连接)和数据集模式(非连接)。 直接访问模式直接访问模式:连接、数据命令及执行、返:连接、数据命令及执行、返回结果集,使用回结果集,使用数据读取器数据读取器(DataReader)读)读取数据,数据使用期间,取数据,数据使用期间,保持保持数据连接。数据连接。 数据集模式数据集模式:连接、数据命令及执行、返回

18、:连接、数据命令及执行、返回结果集,结果集, 使用使用数据适配器数据适配器(DataAdapter)将)将数据加载到数据集对象(数据加载到数据集对象(DataSet),即可),即可断开断开与数据源的连接。且数据操作完毕后,亦可使与数据源的连接。且数据操作完毕后,亦可使用数据适配器将更改写回数据库。用数据适配器将更改写回数据库。14.2.2 14.2.2 数据访问模式高级程序设计语言21/144 两种访问模式的特点两种访问模式的特点 直接访问模式特点直接访问模式特点n可完成额外功能:可完成额外功能:DDL命令(命令( Data Definition Language 、数据定义语言)、数据定义语

19、言)n系统开销相对较少,速度相对快。系统开销相对较少,速度相对快。 数据集模式特点数据集模式特点n可同时使用多表;可同时使用多表;n可操作来自多个不同数据源的数据;可操作来自多个不同数据源的数据;n在分布式应用程序中,便于层间移动数据;在分布式应用程序中,便于层间移动数据;n便于与其它应用程序进行数据交换;便于与其它应用程序进行数据交换;n便于不同形式的数据绑定;便于不同形式的数据绑定;n数据集内记录可重复使用;数据集内记录可重复使用;n便于编程(支持随机访问、分页、动态排序等);便于编程(支持随机访问、分页、动态排序等);n系统开销相对较大,速度相对慢。系统开销相对较大,速度相对慢。14.2

20、.2 14.2.2 数据访问模式高级程序设计语言22/144 根据使用的数据源,确定使用根据使用的数据源,确定使用.NET 框架数框架数据提供程序。据提供程序。 建立与数据源的连接,需要使用建立与数据源的连接,需要使用Connection对象。对象。 执行对数据源的操作命令,通常是执行对数据源的操作命令,通常是SQL命令,命令,需要使用需要使用Command对象。对象。 对获得的数据进行操作,常使用对获得的数据进行操作,常使用DataReader、DataSet对象。对象。 向用户显示数据,需要使用数据控件。向用户显示数据,需要使用数据控件。 14.2.3 14.2.3 使用ADO.NETAD

21、O.NET访问数据库的一般步骤高级程序设计语言23/14414.3 数据库的连接14.3.1 数据库连接的方法数据库连接的方法 n在在ADO.NET中,可以使用中,可以使用Connection对象连接到数据对象连接到数据库。库。n根据数据源的不同,连接对象有四种:根据数据源的不同,连接对象有四种:SqlConnection、OleDbConnection、OdbcConnection、OracleConnection。n连接对象的最主要属性是连接对象的最主要属性是ConnectionString、State ConnectionString:用于设置连接字符串。对于不同的用于设置连接字符串。对

22、于不同的Connection对象,其连接字符串有所不同。对象,其连接字符串有所不同。 State:获取连接的当前状态获取连接的当前状态n连接对象的最主要方法是连接对象的最主要方法是Open、Close Open:使用使用ConnectionString所指定的属性设置打开数所指定的属性设置打开数据库连接。据库连接。 Close:关闭与数据库的连接。关闭与数据库的连接。高级程序设计语言24/144成员名称成员名称说明说明Open连接处于打开状态。连接处于打开状态。Close连接处于关闭状态。连接处于关闭状态。State枚举成员值高级程序设计语言25/1441. 连接到连接到SQL Server数

23、据库数据库人工输入代码直接建立连接人工输入代码直接建立连接 SQL Server用户名和密码验证用户名和密码验证Using System.Data.SqlClient;SqlConnection myConnection=new SqlConnection();myConnection.ConnectionString=“server=localhost;uid=sa;pwd=; database=test”; Windows身份验证身份验证Using System.Data.SqlClient;SqlConnection myConnection=new SqlConnection();my

24、Connection.ConnectionString=“Persist Security Info=false; Integrated Security=SSPI;database=northwind; server=localhost;Connect Timeout=30”;高级程序设计语言26/144通过通过“属性属性”窗口建立连接窗口建立连接 在窗体上放置一个在窗体上放置一个SqlConnection控件。控件。 注:若在工具箱中找不到注:若在工具箱中找不到SqlConnection控件,右键单击控件,右键单击“数据数据”选项卡,在弹出式菜单中单击选项卡,在弹出式菜单中单击“选择项选择

25、项”,添加,添加SqlConnection等控件。等控件。在在“属性属性”窗口中单击窗口中单击sqlConnection控控件的件的ConnectionString属性右侧的项,打开属性右侧的项,打开 “添加连接添加连接”对话框,选择要连接的下拉按对话框,选择要连接的下拉按钮,从弹出的下拉列表中选择钮,从弹出的下拉列表中选择“新建连接新建连接”选数据库所在的服务器,身份验证方式,选选数据库所在的服务器,身份验证方式,选择或输入要连接的数据库名,并测试连接。择或输入要连接的数据库名,并测试连接。高级程序设计语言27/1442.连接连接Access数据库数据库使用使用OLE DB .NET Fra

26、mework数据提供程序数据提供程序Using System.Data.OleDb;OleDbConnection myConnection=new OleDbConnection();myConnection.ConnectionString=“Provider=Microsoft.Jet.OLEDB.4.0; DataSource=c:binnwind.mdb”;使用使用ODBC数据提供程序数据提供程序Using System.Data.Odbc;OdbcConnection myConnection=new OdbcConnection();myConnection.Connection

27、String=“DSN=dsnname”;开始开始/ /控制面板控制面板/ /管理工具管理工具/ /数据源(数据源(ODBCODBC)/ /系统系统DSN/DSN/添加添加/ /选择选择“Driver Driver do Microsoft Access (do Microsoft Access (* *.mdb).mdb)”/ /完成完成/ /输入要定义的数据源名称(可与输入要定义的数据源名称(可与数据库同名)数据库同名)/ /选择选择/ /选择选择ACCESSACCESS数据源文件数据源文件/ /确定。确定。 高级程序设计语言28/1443.连接连接Oracle数据源数据源Using Sy

28、stem.Data.OracleClient;String myConnection=“Data Source=Oracle8i; Integrated Security=yes; Provider=MSDAOORA; uid=scott; pwd=tiger; server=yourServer”;OracleConnection myConn=new OracleConnection(myConnection);myConn.Open();高级程序设计语言29/144【 案例案例14-1】连接数据库。连接数据库。l建立一个建立一个Windows应用应用程序,窗体上放置二个程序,窗体上放置二

29、个按钮,第一个按钮用于按钮,第一个按钮用于在单击时连接到在单击时连接到SQL Server 中的中的Northwind 数据库,第二个按钮用数据库,第二个按钮用于在单击时连接到于在单击时连接到ACCESS的的db1数据库。数据库。连接成功,弹出对话框,连接成功,弹出对话框,显示显示“已建立与数已建立与数据库的连接据库的连接”,否则显,否则显示错误信息。示错误信息。 (人工输入代码建立连接)(人工输入代码建立连接)高级程序设计语言30/144using System.Data.SqlClient; /引入引入SQL SERVER数据源命名空间数据源命名空间using System.Data.Ol

30、eDb; /引入引入ACCESS数据源命名空间数据源命名空间 private void button1_Click(object sender, EventArgs e) try SqlConnection myConnection = new SqlConnection(); myConnection.ConnectionString = “Persist Security Info=False; Integrated Security=SSPI;database=northwind;server=localhost”; /Windows身份验证身份验证 myConnection.Open(

31、); MessageBox.Show(已建立与已建立与SQL Server数据库的连接数据库的连接!); myConnection.Close(); catch (SqlException ee) MessageBox.Show(ee.Message); ?如果采用通过“属性”窗口建立连接,Click事件代码应做何改变高级程序设计语言31/144 private void button2_Click(object sender, EventArgs e) try OleDbConnection myConnection1 = new OleDbConnection(); myConnectio

32、n1.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:db1.mdb; myConnection1.Open(); MessageBox.Show(已建立与已建立与ACCESS数据库的连接数据库的连接!); myConnection1.Close(); catch (Exception ee) MessageBox.Show(ee.Message); 高级程序设计语言32/1441 1、.NET.NET框架的数据提供程序类型?支持的数据源?框架的数据提供程序类型?支持的数据源?2 2、ADO.NETADO.NE

33、T提供的数据访问模式?提供的数据访问模式?3 3、ADO.NETADO.NET访问数据库的一般步骤?访问数据库的一般步骤?4 4、连接对象的最主要属性?、连接对象的最主要属性?高级程序设计语言33/14414.4 直接访问模式 直接访问模式直接访问模式通过命令对象直接操作数据库或将数据读到数通过命令对象直接操作数据库或将数据读到数据读取器中使用据读取器中使用。使用的核心组件:。使用的核心组件:Command类、类、 DataReader类。类。14.4.1数据命令对象数据命令对象1.功能:数据命令对象可直接执行功能:数据命令对象可直接执行 SQL 语句或存储过程。语句或存储过程。2.类型:类型

34、:Command类有四种:类有四种: OleDbCommand、SqlCommand、OdbcCommand 、 OracleCommand 。 OleDbCommand 类可用于任何类可用于任何 OLE DB 提供程序,提供程序,SqlCommand 类类进行优化以便用于进行优化以便用于 SQL Server 7.0 或更高版本,或更高版本,OdbcCommand 类类用于用于 ODBC 数据源,数据源,OracleCommand 类用于类用于 Oracle 8.1.7或更高版或更高版本数据库。本数据库。 高级程序设计语言34/1443.直接访问模式使用数据命令访问数据库的基本步骤直接访问模

35、式使用数据命令访问数据库的基本步骤建立数据命令对象。建立数据命令对象。设置数据命令对象的属性。设置数据命令对象的属性。 一个连接、命令的名称或文本、参数。一个连接、命令的名称或文本、参数。 执行命令。执行命令。 根据预期返回的结果执行命令。如果预期返回的是根据预期返回的结果执行命令。如果预期返回的是一个结果集,则调用命令的一个结果集,则调用命令的ExecuteReader()方法,方法,如果执行的是对数据库的更新命令,则调用命令的如果执行的是对数据库的更新命令,则调用命令的ExecuteNonQuery()方法。方法。关闭有关对象,释放资源。关闭有关对象,释放资源。 高级程序设计语言35/14

36、4n建立数据命令的构造函数:建立数据命令的构造函数:lpublic OleDbCommand()lpublic OleDbCommand(string)lpublic OleDbCommand(string,OleDbConnection)n设置数据命令的常用属性:设置数据命令的常用属性:lConnection:对一个连接对象的引用,命令使用它与数据库对一个连接对象的引用,命令使用它与数据库通信通信lCommandText:获取或设置在数据源执行的获取或设置在数据源执行的SQL语句或存储语句或存储过程名过程名lCommandType:获取或设置一个指令如何解释获取或设置一个指令如何解释Comm

37、andText属性的值属性的值(Text|StoredProcedure|TableDirect (OLE DB的的.NET框架数据提供程序框架数据提供程序) )lParameters:参数集合,用于设置参数,向参数集合,用于设置参数,向SQL命令传递数命令传递数据,执行参数查询据,执行参数查询高级程序设计语言36/144n执行命令执行命令(Command对象的常用方法对象的常用方法):lExecuteReader:将:将CommandText发送到发送到Connection并生并生成一个成一个DataReader对象对象lExecuteNonQuery:针对连接执行:针对连接执行SQL语句并

38、返回一个整语句并返回一个整数,指示操作成功与否数,指示操作成功与否lCreateParameter:创建参数对象的新实例:创建参数对象的新实例lExecuteScalar:执行查询,并返回查询所返回的结果集:执行查询,并返回查询所返回的结果集中第一行的第一列(返回单个值),忽略额外的列或行中第一行的第一列(返回单个值),忽略额外的列或行高级程序设计语言37/144【案例案例14-2】求选修了求选修了“70101”课程的学生的平均成绩。课程的学生的平均成绩。l建立一个建立一个Windows应用程序,通过应用程序,通过SqlCommand对象查询对象查询 SQL Server 中中xsgl 数据库

39、数据库Score表中选修了表中选修了“70101”课程课程的学生的平均成绩,并将成绩显示在文本框中。的学生的平均成绩,并将成绩显示在文本框中。高级程序设计语言38/144【技术要点技术要点】1、引入命名空间、引入命名空间System.Data.SqlClient2、通过带参数的构造函数直接建立、通过带参数的构造函数直接建立SqlConnection连接对象和连接对象和SqlCommand命令对象命令对象3、执行命令对象的、执行命令对象的ExecuteScalar()方法,实现单方法,实现单一值返回一值返回4、将、将ExecuteScalar()返回的单一值直接设置为文返回的单一值直接设置为文本

40、框的文本值本框的文本值高级程序设计语言39/144 using System.Data.SqlClient; /引入命名空间引入命名空间 private void button1_Click(object sender, EventArgs e) SqlConnection myconn = new SqlConnection( Persist Security Info=False; Integrated Security=SSPI;database=xsgl; server=localhost ); SqlCommand mycmd = new SqlCommand(select avg(

41、score) from score where courseID=70101, myconn); myconn.Open(); textBox1.Text = mycmd.ExecuteScalar().ToString(); myconn.Close(); 123456高级程序设计语言40/144 1DataReader的基本用法的基本用法nDataReader对象是一个简单的数据集,用于从数据源对象是一个简单的数据集,用于从数据源中检索中检索只读只读、向前向前数据集,常用于检索大量数据。数据集,常用于检索大量数据。nDataReader对象的创建对象的创建 DataReader对象对象不能

42、用不能用new建立建立,只能调用,只能调用Command对象的对象的ExecuteReader()方法产生。方法产生。 SqlDataReader myReader; myReader=myCommand.ExecuteReader(); 14.4.2 DataReader14.4.2 DataReader对象高级程序设计语言41/144nDataReader常用的属性:常用的属性:lFieldCount: 获取当前行中的列数。获取当前行中的列数。 lHasRows: 判断是否包含一行或多行记录。判断是否包含一行或多行记录。 lIsClosed:指示是否已关闭数据读取器。:指示是否已关闭数据读

43、取器。n DataReader常用的方法:常用的方法: lRead:使:使DataReader 前进到下一条记录,返回一个前进到下一条记录,返回一个boolean值值 。 lGetName:获取指定列的名称,参数为列号。:获取指定列的名称,参数为列号。 lGetValue:用于读取数据集当前行的某一列的数据,参数为列号。:用于读取数据集当前行的某一列的数据,参数为列号。lIsDBNull:判断当前行指定列是否为空值,参数为列号。:判断当前行指定列是否为空值,参数为列号。 lClose:关闭:关闭DataReader对象。对象。lGetOrdinal:在给定列名称的情况下获取列序号,参数为列名。

44、:在给定列名称的情况下获取列序号,参数为列名。lNextResult:当读取批处理:当读取批处理 SQL 语句的结果时,使数据读取器前进语句的结果时,使数据读取器前进到下一个结果。到下一个结果。 Sqlcmd1.CommandText=select * from product; select * from orders ; SqlDataReader sdr = Sqlcmd1.ExecuteReader(); 高级程序设计语言42/144n遍历遍历DataReader对象的记录对象的记录 当命令对象的当命令对象的ExecuteReader()方法返回方法返回DataReader对象时,当前

45、光标对象时,当前光标的位置是第一条记录的前面。调用的位置是第一条记录的前面。调用DataReader对象的对象的Read()方法可把方法可把光标移动到下一条记录,返回值为光标移动到下一条记录,返回值为Boolean类型类型(true|false)。 while (myreader.Read() /读取数据读取数据 n通过通过DataReader对象访问字段中的值对象访问字段中的值 Item属性属性: Item属性是属性是DataReader对象的索引,基于对象的索引,基于0开始编号。开始编号。 myreader字段名字段名 myreader字段索引字段索引 Get方法方法:每个每个DataRe

46、ader对象定义了一组对象定义了一组Get方法,用于返回适当类型方法,用于返回适当类型的值。的值。 myreader.GetInt320 /返回指定列的值,类型为整数返回指定列的值,类型为整数 myreader.GetString1 /返回指定列的值,类型为字符串返回指定列的值,类型为字符串 GetValue方法:用于读取数据集当前行的某一列的数据,参数为列号。方法:用于读取数据集当前行的某一列的数据,参数为列号。 myreader.GetValue(列号列号)高级程序设计语言43/144 【案例案例14-3】显示课程显示课程(Course)数据表中的)数据表中的数据。数据。l建立一个建立一个

47、Windows应应用程序,读取用程序,读取 SQL Server 中中xsgl 数据库数据库Course表中的记录,表中的记录,将课程的号码、名称将课程的号码、名称和教师的姓名显示在和教师的姓名显示在文本框中。文本框中。 高级程序设计语言44/144【技术要点技术要点】1、文本框属性设置:、文本框属性设置:Multiline 、ScrollBars2、引入命名空间、引入命名空间System.Data.SqlClient3、建立连接对象、建立连接对象4、建立命令对象并设置其、建立命令对象并设置其Connection、CommandType、 CommandText属性属性5、执行命令对象的、执行

48、命令对象的ExecuteReader()方法方法6、通过、通过while (myreader.Read()语句从数据读取器中读取语句从数据读取器中读取表中所有数据表中所有数据高级程序设计语言45/144 using System.Data.SqlClient; /引入命名空间引入命名空间 private void DataReaderExample1_Load(object sender, EventArgs e) /数据数据库库连接连接 SqlConnection myConnection = new SqlConnection(); myConnection.ConnectionStrin

49、g = Persist Security Info=False; Integrated Security=SSPI;database=xsgl; server=localhost; /windows身份验证身份验证 /命令对象的建立与属性设置命令对象的建立与属性设置 SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = myConnection; sqlCommand.CommandType = CommandType.Text; sqlCommand.CommandText = select * from cour

50、se; myConnection.Open(); 12345678高级程序设计语言46/144 SqlDataReader dreader = sqlCommand.ExecuteReader (CommandBehavior.CloseConnection); /数据读取器关闭时,数据读取器关闭时, 连接对象自动关闭连接对象自动关闭 string s = ; this.Text = “显示显示Course表的数据表的数据”; /定义当前窗口的标题定义当前窗口的标题 /通过通过SqlDataReader读取单读取单一一表表格格Course中的数据中的数据 while (dreader.Read

51、() s += dreader“courseID”.ToString() + “t” /“t”是是制表符制表符 + dreadercourseName.ToString() + t /+ dreaderteacher.ToString() + rn; /r 回车回车 n 换行换行 + dreader“teacher”.ToString() + Environment.NewLine; /与操作系统无关的与操作系统无关的 回回车车换行换行 textBox1.Text = s; dreader.Close(); s += dreader.GetValue(0).ToString() + t + d

52、reader.GetValue(1).ToString() + t + dreader.GetValue(2).ToString() + Environment.NewLine;9101112131415高级程序设计语言47/144 2获取多个结果集获取多个结果集 如果返回的是多个结果集,如果返回的是多个结果集,DataReader提供提供NextResult()方法以按顺序循环访问这些结果集。方法以按顺序循环访问这些结果集。 案例文件:ch5/se3/DataReaderExample2.cs高级程序设计语言48/144 【案例案例14-4】显示学生显示学生(Student)、课程)、课程(

53、Course)表中的数据。)表中的数据。l建立一个建立一个Windows应应用程序,分别读取用程序,分别读取 SQL Server 中中xsgl 数数据库据库Student、Course表中的记录,并将读表中的记录,并将读取的信息显示在文本取的信息显示在文本框中。框中。 高级程序设计语言49/144【技术要点技术要点】1、文本框属性设置:、文本框属性设置:Multiline 、ScrollBars2、引入命名空间、引入命名空间System.Data.SqlClient3、建立连接对象、建立连接对象4、建立命令对象并设置其、建立命令对象并设置其Connection、CommandType、 Co

54、mmandText属性属性5、执行命令对象的、执行命令对象的ExecuteReader()方法方法6、通过通过myReader.NextResult()方法结合方法结合 while (myreader.Read()单表遍历语句从数据读取器中单表遍历语句从数据读取器中 读取多表数据读取多表数据高级程序设计语言50/144 using System.Data.SqlClient; /引入命名空间引入命名空间 private void DataReaderExample2_Load(object sender, EventArgs e) SqlConnection myConnection = ne

55、w SqlConnection(); myConnection.ConnectionString = Persist Security Info=False;Integrated Security=SSPI; database=xsgl;server=localhost; /windows身份验证身份验证 SqlCommand sqlCommand = new SqlCommand(select studID,studName from student;+select courseID,courseName from course,myConnection); myConnection.Ope

56、n(); SqlDataReader myReader = sqlCommand.ExecuteReader (CommandBehavior.CloseConnection); /数据读取器关闭时,连接对象自动关闭数据读取器关闭时,连接对象自动关闭 string s = ; /通过通过SqlDataReader读取读取多表(多表(student表、表、Course表)表)中的数据中的数据 do s += myReader.GetName(0) + t + myReader.GetName(1) + Environment.NewLine; /显示字段名显示字段名 while (myReade

57、r.Read() s += myReader.GetInt32(0).ToString() + t + myReader.GetString(1) + Environment.NewLine; /显示字段值显示字段值 while (myReader.NextResult(); textBox1.Text = s; myReader.Close(); SqlCommand sqlCommand = new SqlCommand();sqlCommand.Connection = myConnection;sqlCommand.CommandText = select studID,studNam

58、e from student;+select courseID,courseName from course ;1234567891011121314高级程序设计语言51/1441.命令类型命令类型 数据库定义数据库定义 (DDL) 命令:用于创建和管理数据库结构命令:用于创建和管理数据库结构(如表和存储过程)。(如表和存储过程)。 更新命令:更新命令:“更新更新”(Update)、“插入插入”(Insert) 和和“删删除除”(Delete) 语句。语句。 2. ExecuteNonQuery()方法方法 数据定义与更新命令都需要调用命令对象的数据定义与更新命令都需要调用命令对象的Execu

59、teNonQuery()方法,而且方法,而且返回一个整数指示操作的成返回一个整数指示操作的成功与否功与否。返回值因是要更新记录还是发出。返回值因是要更新记录还是发出 DDL 命令而异:命令而异: n如果要创建或修改数据库结构,当操作成功时返回值为如果要创建或修改数据库结构,当操作成功时返回值为 -1。 n如果要更新记录,则返回值指示受到该操作如果要更新记录,则返回值指示受到该操作影响的记录数影响的记录数。 n在两种情况下,如果操作失败,命令都返回在两种情况下,如果操作失败,命令都返回零零。14.4.3 14.4.3 执行更新数据库的命令高级程序设计语言52/144【案例案例14-5 】创建表。

60、创建表。l建立一个建立一个Windows程程序,窗体上放置一个序,窗体上放置一个按钮,单击按钮将在按钮,单击按钮将在SQL Server 的的xsgl数数据库中建立一个新的据库中建立一个新的表,表名为表,表名为“major”,包含两个字段:包含两个字段:majorID和和majorName。高级程序设计语言53/144 private void button1_Click(object sender, EventArgs e) SqlConnection myConnection = new SqlConnection(); myConnection.ConnectionString = pe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论