第14章-ASP-NET数据库应用开发基础_第1页
第14章-ASP-NET数据库应用开发基础_第2页
第14章-ASP-NET数据库应用开发基础_第3页
第14章-ASP-NET数据库应用开发基础_第4页
第14章-ASP-NET数据库应用开发基础_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

《商务网站设计与开发》温浩宇西安电子科技大学第14章数据库应用开发根底内容14.1数据库接口ADO.NET14.2连接数据源Connection对象14.3执行SQL命令Command对象14.4读取数据DataReader14.5思考题14.1数据库接口ADO.NETWeb应用程序对数据库效劳器的访问需要在网络协议的支持下构建会话〔Session〕,在此根底上,应用程序可以向数据库效劳器发出数据的操作请求,比方增加数据、查询数据等,数据库效劳器那么会根据请求对数据进行操作或返回查询结果。虽然各种不同的RDBMS都尽可能遵循新版本的SQL的标准,但应用程序依然不能用相同的代码来访问不同的RDBMS。这一方面是因为不同的RDBMS中SQL语法并不完全相同,更重要的方面是每个RDBMS都有不同的建立会话、传输SQL、返回数据结果的网络协议。虽然通常RDBMS都会提供一组数据库访问的应用程序接口〔API〕,但对于应用程序的开发者而言,不同的接口函数、不同的协议规那么不仅提高了学习的难度,而且当数据库进行升级或移植时难度巨大。如果有一套统一的API作为访问不同RDBMS的接口,那么会有效降低开发难度,显著降低开发和维护本钱。14.1数据库接口ADO.NETApplicationDriverManagerDriverDriverDriverDataSourceDataSourceDataSourceODBCAPIODBCAPIODBC的结构图14.1数据库接口ADO.NET应用系统ADOOLEDB电子表格ODBCSQLISAM目录服务文件系统ADO的结构图14.1数据库接口ADO.NETADO.NET数据提供程序ASP.NET或其它应用程序其他Web窗体ConnectionCommandDataAdapterDataReaderDataSetWindows窗体数据库ADO.NET的结构图14.1数据库接口ADO.NETADO.NET中包含了一系列核心对象来构建高效、广泛适用的数据库访问方式。其中,Connection对象负责创立于数据源〔不一定是RDBMS〕的连接;Command对象可以向数据库效劳器发出SQL命令,完成数据增、删、改、查,执行存储过程,收发参数信息等;DataReader对象可以产生一个只读的记录集,从而提供高效率的数据读取方式;DataAdapter对象建立了从数据源到DataSet对象的桥梁,其中利用了Command对象来执行多种SQL命令以完成DataSet的数据加载和数据回写。ADO.NET引入了DataSet的概念,这是一个驻于内存的数据缓冲区,它可以包含多个类似关系型数据库中的表的对象——DataTable。DataSet替代了ADO原有的Recordset对象,提高了程序的交互性和可扩展性,尤其适合于分布式的应用场合。不管数据来源于一个关系型的数据库,还是来源于一个XML文档,都可以用统一的编程模型加载到DataSet中,并对其中的数据进行操作。14.2连接数据源Connection对象可以使用Connection对象来连接数据源,而根据数据源的类型〔比方SQLServer、Oracle等〕要使用DbConnection类的某个子类。例如,访问OLEDB的数据源需要使用OleDbConnection,访问SQLServer数据库需要SqlConnection。名称说明ConnectionString获取或设置数据库的连接字符串。ConnectionTimeout获取建立连接的最长等待时间,超过等待时间将产生错误。Database获取数据库的名称。DataSource获取数据源(比如数据库服务器)的名称。DbProviderFactory获取数据库提供者的名称。ServerVersion获取服务器版本。State获取连接状态。14.2连接数据源Connection对象ConnectionString为可以设置的属性。针对特定的数据源,需要给出特定的“连接字符串〞,其中包含了数据库地址、名称、用户名和密码等信息。下面代码给出两个典型的ConnectionString值:DataSource=00;InitialCatalog=crm_db;PersistSecurityInfo=True;UserID=crm_user;Password=123456;ConnectTimeout=30或者DataSource=.;InitialCatalog=DbExamples;IntegratedSecurity=True;ConnectTimeout=3014.2连接数据源Connection对象DbConnection类常用方法usingSystem.Data.SqlClient;……//构建连接字符串stringconnectionString="DataSource=.;InitialCatalog=DbExamples;Integrated

Security=True;ConnectTimeout=30";

//实例化SqlConnection对象SqlConnectionconnection=newSqlConnection(connectionString);

connection.Open();/*这里添加代码完成数据的操作*/connection.Close();名称说明Open根据连接字符串连接数据库。Close关闭数据库连接。BeginDbTransaction开始一个数据库事务。CreateDbCommand创建一个与当前连接相关联的DbCommand对象。GetSchema从数据源中获取架构信息。14.2连接数据源Connection对象//在异常处理try/catch块中翻开数据连接并完成数据的操作try{connection.Open(); /* 这里添加代码完成数据的操作 */}catch(Exceptionex)//当出现异常时要执行的语句{Response.Write(ex.Message);}finally//无论如何都要执行的语句{connection.Close();}//结束SqlConnection对象的范围,并释放对象14.3执行SQL命令Command对象通过Connection对象建立了与数据库的连接后,就可以使用SQL语言来完成数据的增、删、改、查。这四项数据操作的根本功能可以被简称为CRUD,即Create、Read〔或Retrieve〕、Update和Delete〔或Destroy〕。对于数据库中已有的数据表,我们可以通过SQL中的Insert、Delete、Update和Select语句分别来完成增、删、改、查的操作。在ADO.NET中,这些SQL语句通过Command对象传输到数据库效劳器中,并获取数据库的反响。DbCommand类是构建Command对象的基类,它的派生类包括SqlCommand〔用于SQLServer数据库〕、SqlCommand〔用于Oracle数据库〕、OleDbCommand〔用于OLEDB接口〕、OdbcCommand〔用于ODBC接口〕等。14.3执行SQL命令Command对象DbCommand类常用属性表名称说明Connection获取或设置数据库的连接对象CommandType指定CommandText属性中的命令类型,包括:Text、StoredProcedure和TableDirectCommandText获取或设置在数据库中执行的命令CommandTimeout获取或设置命令执行的等待时间,超出时间将报错Parameters获取命令中的参数所对应的参数对象集合

Transaction获取或设置命令所属的事务对象14.3执行SQL命令Command对象DbCommand类常用方法表NameDescriptionExecuteNonQuery执行非查询语句ExecuteReader执行查询语句并返回一个DbDataReader对象ExecuteScalar执行查询语句并返回结果集的第一行第一列的值(通常用于具有集合函数的查询)

Cancel尝试取消命令的执行CreateParameter创建一个DbParameter实例对象14.3执行SQL命令Command对象使用DbCommand类在数据库中进行数据的增、删、改、查操作,首先在SQLServer数据库中建立了一个名为“tb_客户〞的表。字段名类型是否可为空客户IDint不可简称nvarchar(10)不可全称nvarchar(50)不可行业nvarchar(10)不可地址nvarchar(50)不可邮编nvarchar(10)可以座机nvarchar(50)可以手机nvarchar(50)可以联系人nvarchar(50)可以代理商名称nvarchar(50)不可创建时间smalldatetime可以修改时间smalldatetime可以备注nvarchar(50)可以14.3执行SQL命令Command对象//构建连接字符串stringconnectionString="DataSource=.;InitialCatalog=DbExamples;IntegratedSecurity=True;ConnectTimeout=30";

//构建SQL字符串stringqueryString="INSERTINTO[tb_客户]"+"([简称],[全称],[行业],[地址],[],[座机]"+",[],[联系人],[创立时间],[修改时间],[备注])"+"VALUES"+"('浩瀚','深圳浩瀚电子公司','集成电路','深圳南山区明德路2号','002200','12345678'"+",'1391111111','李浩瀚',2023-1-1,2023-1-1,'新客户')";14.3执行SQL命令Command对象//实例化SqlConnection对象,并规定了SqlConnection对象的范围using(SqlConnectionconnection=newSqlConnection(connectionString)){SqlCommandcommand=newSqlCommand(queryString,connection);

//实例化SqlCommand对象try{//在异常处理try/catch块中翻开数据连接并完成数据的操作connection.Open();inti=command.ExecuteNonQuery();Response.Write("执行完毕,"+i+"条数据受到影响");}catch(Exceptionex)//当出现异常时要执行的语句{Response.Write(ex.Message);}finally//无论如何都要执行的语句{connection.Close();}}//结束SqlConnection对象的范围,并释放对象14.3执行SQL命令Command对象上述代码执行了一条INSERT语句,同样的,DELETE和UPDATE语句都可以用以上的代码结构,只是字符串变量queryString的赋值不同而已,例如“删除〞数据的操作代码为:stringqueryString="DELETEFROMtb_客户WHERE简称='浩瀚'";“修改〞数据的操作代码为:stringqueryString="UPDATE[tb_客户]SET[全称]='深圳浩瀚医疗器械公司'WHERE简称='浩瀚'";14.3执行SQL命令Command对象查询操作与非查询操作最大的不同是,查询操作会返回一个查询结果集。对于关系型数据库系统而言,查询结果集是一个二维表,ADO.NET中提供了DataReader对象来读取结果集中的数据。Command对象使用ExecuteReader函数〔而不是ExecuteNonQuery函数〕实例化一个DataReader对象,随后就可以使用DataReader对象的Read函数来逐条读取结果集中的每一个数据项。14.3执行SQL命令Command对象//构建SQL字符串stringqueryString="SELECTTOP10*FROMtb_客户WHERE简称='浩瀚'";//实例化SqlCommand对象SqlCommandcommand=newSqlCommand(queryString,connection);//实例化SqlDataReader对象SqlDataReaderreader=command.ExecuteReader();

while(reader.Read()){Response.Write("简称:"+reader["简称"]+";");Response.Write("全称:"+reader["全称"]+";");Response.Write("<br/>");}……14.3执行SQL命令Command对象完成对数据的各种增、删、改、查操作是建立数据库管理系统的基石,不管操作有多么复杂,本质上都是形成各种SQL语句传输到数据库效劳器中来执行。ASP.NET程序的主要任务就是提供用户界面以获取用户对数据的操作需求,下面我们通过简单的ASP.NET代码把上述的数据增、删、改、查操作继承在一个页面中。14.4读取数据DataReader可以使用Command对象向数据库传输增、删、改、查的SQL指令。对于非查询的操作,SQLServer效劳器会返回操作所影响的行数,而对于查询操作,那么返回一个二维表结构的结果集,这是就需要DataReader对象来读取这些数据。DataReader对象读取数据时只能从头到尾单向读取〔forward-only〕,这主要是出于效率的考虑。实际上这种单向读取数据的方式完全满足Web程序设计的需求。DbDataReader类是构建DataReader对象的基类,它的派生类包括SqlDataReader〔用于SQLServer数据库〕、OracleDataReader〔用于Oracle数据库〕、OleDbDataReader〔用于OLEDB接口〕、OdbcDataReader〔用于ODBC接口〕等。14.4读取数据DataReaderDbDataReader类常用属性表名称说明Depth获取当前行的嵌套深度值FieldCount获取当前行的字段数量HasRows获取是否包含一行或多行数据IsClosed获取是否DataReader已经关闭Item[Int32]通过字段序号获取指定字段的值Item[String]通过字段名称获取指定字段的值VisibleFieldCount获取可见字段的数量14.4读取数据DataReaderDbDataReader类常用方法表名称说明Read将读取器前进到结果集中的下一个记录。Close关闭DataReader对象。Dispose释放DataReader对象实例所使用的所有资源。GetBoolean获取指定列的布尔值形式的值。GetByte获取指定列的字节形式的值。GetBytes从指定列读取一个字节流读到缓冲区中。GetChar获取指定列的单个字符串形式的值。GetChars从指定列读取一个字符流。GetDecimal获取指定列的Decimal对象形式的值。GetDouble获取指定列的双精度浮点数形式的值。GetFloat获取指定列的单精度浮点数形式的值。GetGuid获取指定列的全局唯一标识符(GUID)形式的值。名称说明GetInt16获取指定列的16位有符号整数形式的值。GetInt32获取指定列的32位有符号整数形式的值。GetInt64获取指定列的64位有符号整数形式的值。GetDateTime获取指定列的DateTime对象形式的值。GetString获取指定列的作为String的实例的值。GetValue获取指定列的作为Object的实例的值。GetValues使用当前行的列值来填充对象数组。IsDBNull获取一个值,该值指示列是否为空(NULL)。GetName给定了从零开始的列序号时,获取列的名称。GetOrdinal给定列名称时,获取列序号。GetDataTypeName获取指定列的数据类型的名称。GetFieldType获取指定列的数据类型。NextResult读取批处理语句的结果时,使读取器前进到下一个结果。14.4读取数据DataReader在DbDataReader类的方法中有多个以某种类型获取数据的方法,比方GetString、GetInt32等,这些方法虽然可以获取指定列的值,但参数中只能用使用列序号,而不能使用列的名称。比方以下三行代码都可以获得第2列〔字段名为“简称〞〕的值,并输出到HTML中:Response.Write("简称:"+reader[1]+";");Response.Write("简称:"+reader["简称"]+";");Response.Write("简称:"+reader.GetString(1)+";");当然,使用列序号需要注意,与C/C++语言一样,C#的数组下标是从0开始的;另外,使用列名称的可读性和可维护性都要更优。特别是,如果使用列序号,一旦数据库表中的列顺序发生变化,可能会带来程序的运行异常。14.4读取数据DataReader使用Command对象执行SQL查询命令时已经给出了使用DataReader对象的方法,其中与DataReader对象有关的核心代码如下:stringqueryString="SELECTTOP10*FROMtb_客户WHERE简称='浩瀚'";

//构建SQL字符串……//实例化SqlCommand对象SqlCommandcommand=newSqlCommand(queryString,connection);

SqlDataReaderreader=command.ExecuteReader();

//实例化SqlDataReader对象

while(reader.Read()){Response.Write("简称:"+reader["简称"]+";");Response.Write("全称:"+reader["全称"]+";");Response.Write("<br/>");}reader.Close();14.4读取数据DataReader在Response对象输出字符串时,输出一个完整的<table>内容。Response.Write("<tableborder='1'>");//输出Table的起始标签Response.Write("<tr><td>简称</td><td>全称</td></tr>");//输出标题行

while(reader.Read()){Response.Write("<tr><td>"+reader["简称"]+"</td><td>"+reader["全称"]+"</td></tr>");//输出数据行}Response.Write("</table>");//输出Table的终结标签14.4读取数据DataReader为了提高开发效率,ASP.NET提供了大量的Web效劳器控件,其中在效劳器端运行的Table控件就可以很好地帮助构建HTML中的<table>。while(reader.Read()){TableRowtempRow=newTableRow();TableCelltempCell=newTableCell();tempCell.Text=reader["简称"].ToString();tempRow.Cells.Add(tempCell);tempCell=newTableCell();tempCell.Text=reader["全称"].ToString();tempRow.Cells.Add(tempCell);Table1.Rows.Add(tempRow);}14.4读取数据DataReader对于广泛的数据库应用开发需求,ASP.NET专门提供了许多针对结构化数据的Web效劳器控件,其中Repeater控件就可以简化多条数据的迭代输出的开发工作。Repeater控件是一个数据绑定容器控件,用于生成多条数据的列表。我们可以使用Repeater中的<ItemTe

温馨提示

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

最新文档

评论

0/150

提交评论