数据库编程.docx
- 文档编号:10776646
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:49
- 大小:620.36KB
数据库编程.docx
《数据库编程.docx》由会员分享,可在线阅读,更多相关《数据库编程.docx(49页珍藏版)》请在冰豆网上搜索。
数据库编程
第10章数据库编程
数据库应用在程序设计中占有很重要的地位,本章主要介绍利用C#进行数据库编程的基础知识和技巧。
在.NET中对数据库的访问是通过ADO.NET来实现的,ADO.NET是一组包括在.NET框架中的库,用于在.NET应用程序的各种数据存储之间通信。
ADO.NET库中包含了可与数据源连接、提交查询并处理结果的类。
最后,对水晶报表也进行了阐述。
10.1ADO.NET概述
ADO.NET是微软提供的一个统一的数据对象访问模型,它为创建分布式数据共享应用程序提供了一组丰富的组件,它提供了对关系数据、XML和应用程序数据的访问,因此是.NETFramework中不可缺少的一部分。
ADO.NET支持多种开发需求,包括创建由应用程序、工具、语言或Internet浏览器使用的前端数据库客户端和中间层业务对象。
ADO.NET对MicrosoftSQLServer和XML等数据源以及通过OLEDB和XML公开的数据源提供一致的访问。
数据共享使用者应用程序可以使用ADO.NET来连接到这些数据源,并检索、处理和更新所包含的数据。
ADO.NET通过数据处理将数据访问分解为多个可以单独使用或一前一后使用的不连续组件。
ADO.NET包含用于连接到数据库、执行命令和检索结果的.NETFramework数据提供程序。
可以直接处理检索到的结果,或将其放入ADO.NETDataSet对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。
ADO.NETDataSet对象也可以独立于.NETFramework数据提供程序使用,以管理应用程序本地的数据或源自XML的数据。
ADO.NET的设计目标:
●利用当前的ActiveX数据类型(ADO)知识。
●支持N层编程模型。
●集成XML支持。
●利用当前的ADO知识
ADO.NET的设计满足了当今应用程序开发模型的多种要求,该编程模型尽可能地与ADO保持一致,这使得ADO开发人员不必从头开始学习。
ADO.NET是.NETFramework的固有部分,ADO程序员仍很熟悉。
ADO.NET还与ADO共存。
虽然大多数基于.NET的新应用程序将使用ADO.NET来编写,但.NET程序员仍然可以通过.NET与COM的互操作性服务来使用ADO。
10.1.1ADO.NET体系结构概述
以前,数据处理主要依赖于基于连接的双层模型。
当数据处理越来越多地使用多层结构时,程序员正在向断开方式转换,以便为他们的应用程序提供更佳的可缩放性。
1.ADO.NET组件
可以使用ADO.NET的两个组件来访问和处理数据:
●.NETFramework数据提供程序
●DataSet
2..NETFramework数据提供程序
.NETFramework数据提供程序是专门为数据处理以及快速地只进、只读访问数据而设计的组件。
.NETFramework数据提供程序提供了四个核心对象:
Connection对象提供与数据源的连接;Command对象使得能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令;DataReader从数据源中提供高性能的数据流;DataAdapter提供连接DataSet对象和数据源的桥梁。
DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet中数据的更改与数据源保持一致。
3.DataSet
ADO.NETDataSet是ADO.NET的断开式结构的核心组件,ADO.NETDataSet专门为独立于任何数据源的数据访问而设计。
因此,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据。
DataSet包含一个或多个DataTable对象的集合,这些对象由数据行和数据列以及有关DataTable对象中数据的主键、外键、约束和关系信息组成。
图10.1说明了.NETFramework数据提供程序与DataSet之间的关系。
图10.1ADO.NET体系结构
4.选择DataReader或DataSet
在决定应用程序应使用DataReader还是应使用DataSet时,应考虑应用程序所需的功能类型。
DataSet用于执行以下功能:
●在应用程序中将数据缓存在本地,以便可以对数据进行处理。
如果只需要读取查询结果,DataReader是更好的选择。
●在层间或从XMLWeb服务对数据进行远程处理。
●与数据进行动态交互,例如绑定到Windows窗体控件或组合并关联来自多个源的数据。
●对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其它客户端使用。
如果不需要DataSet所提供的功能,则可以使用DataReader以只进、只读方式返回数据,从而提高应用程序的性能。
虽然DataAdapter使用DataReader来填充DataSet的内容,但可以使用DataReader来提高性能,因为这样可以节省DataSet所使用的内存,并将省去创建DataSet并填充其内容所需的处理。
5.XML和ADO.NET
ADO.NET利用XML的力量来提供对数据的断开式访问。
ADO.NET的设计与.NETFramework中XML类的设计是并进的,它们都是同一个结构的组件。
ADO.NET和.NETFramework中的XML类集中于DataSet对象。
无论XML源是文件还是XML流,都可以用来填充DataSet。
无论DataSet中数据的数据源是什么,DataSet都可以作为符合万维网联合会(W3C)标准的XML进行编写,并且将其架构包含为XML架构定义语言(XSD)架构。
由于DataSet固有的序列化格式为XML,因此是在层间移动数据出色的媒介,这使DataSet成为在远程向XMLWeb服务发送数据和架构上下文以及从XMLWeb服务接收数据和架构上下文的最佳选择。
10.1.2ADO.NET对象简介
1.Connection对象
在ADO.NET对象模型中,Connection对象用于与指定的数据源建立连接。
.NET框架中有两个常用Connection对象:
一个是OleDbConnection,用于大多数的数据库连接,一个是SqlConnection,专门用于对SQLServer的连接。
Connection对象的主要属性是ConnectionString,用于设置连接字符串,例如:
myConn.ConnectionString="PersistSecurityInfo=False;IntegratedSecurity=SSPI;InitialCatalog=Northwind;server=(local)"
根据所所访问的数据源的不同,有不同的Connection对象与之对应,这些Connection对象分别是SqlConnection对象、OleDbConnection对象、OdbcConnection对象和OracleConnection对象,应根据访问数据源的不同选择相应的Connection对象。
2.Command对象
Command对象用于执行对数据源各种操作的命令,包括检索、插入、删除、修改等操作。
可以使用SQL语句,也可以使用存储过程来完成这些操作。
根据所所访问的数据源的不同,有不同的Command对象与之对应,这些Command对象分别是SqlCommand对象、OleDbCommand对象、OdbcCommand对象和OracleCommand对象,应根据访问数据源的不同选择相应的Command对象。
如果要使用存储过程来对数据源进行操作,应该把CommandType属性设置为StoredProcedure,同时把CommandText属性设置为存储过程的名字。
如果存储过程使用参数,可以使用Command对象的Parameters属性来访问存储过程的输入和输出参数及返回值。
3.DataReader对象
DataReader对象用于从数据源中读取向前的、只读数据流,是一个简易的数据集,使用它读取记录时通常比从DataSet更快。
DataReader对象是Command对象的ExecuteReader方法从数据源中检索数据时创建的。
要想获得DataReader对象中的数据,必须组合使用DataReader对象的Read方法和相应的Get方法。
Read方法用于移动记录指针到下一行数据,GetDateTime、GetDouble、GetGuid、GetInt32等Get方法,可以获得当前行的每一列信息。
这些方法要求使用列的名称或索引值,以确定获得哪一列的信息。
根据所用的.NETFramework数据提供程序不同,有不同的DataReader对象与之对应。
这些DataReader对象分别是SqlDataReader对象、OleDbDataReader对象、OdbcDataReader对象和OracleDataReader对象。
应根据访问数据源的不同选择相应的DataReader对象。
注意:
不能用DataReader修改数据库中的记录,它是采用向前的,只读的方式读取数据库。
4.DataAdapter对象
DataAdapter对象用作DataSet和数据源之间的连接器以便检索和保存数据。
DataAdapter通过映射Fill(这更改了DataSet中的数据以便与数据源中的数据相匹配)和Update(这更改了数据源中的数据以便与DataSet中的数据相匹配)来提供这一连接器,它用于从数据源检索数据并填充DataSet中,也可用于将对DataSet的更改解析回数据源。
DataAdapter使.NETFramework数据提供程序的Connection对象连接到数据源,并使用Command对象从数据源检索数据以及将更改解析回数据源。
根据所用的.NETFramework数据提供程序不同,有不同的DataAdapter对象与之对应。
这些DataAdapter对象分别是SqlDataAdapter对象、OleDbDataAdapter对象、OdbcDataAdapter对象和OracleDataAdapter对象。
应根据访问数据源的不同选择相应的DataAdapter对象。
5.DataSet对象
DataSet对象是支持ADO.NET的断开式、分布式数据方案的核心对象。
DataSet是数据的内存驻留表示形式,无论数据源是什么,它都会提供一致的关系编程模型,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据。
DataSet表示包括相关表、约束和表间关系在内的整个数据集,可以把DataSet看作是内存中的数据源库。
图10.2显示了DataSet对象模型。
图10.2DataSet对象模型
DataSet中的方法和对象与关系数据库模型中的方法和对象一致。
DataSet也可以按XML的形式来保持和重新加载其内容,并按XML架构定义语言(XSD)架构的形式来保持和重新加载其架构。
6.BindingSource组件
BindingSource组件用于简化将控件绑定到基础数据源的过程。
BindingSource组件既可以作为一个导管,也可以作为一个数据源,其它控件绑定到该数据源。
在将命令传递到基础数据列表时,该组件为你的窗体提供抽象的数据连接。
此外,还可以直接向该组件添加数据,这样,该组件本身起数据源的作用。
BindingSource组件作为窗体上部分或全部组件的数据源。
在VisualStudio中,可以通过DataBindings属性将BindingSource绑定到控件,该属性可在“属性”窗体中访问。
可以将BindingSource组件绑定到两种数据源:
一是简单数据源,如对象的单个属性或ArrayList这样的基本集合;二是复杂数据源,如数据库表。
BindingSource组件作为一个媒介提供绑定和货币管理服务。
在设计或运行时,通过将BindingSource组件的DataSource和DataMember属性分别设置为数据库和表,实现将该组件绑定到复杂数据源。
图10.3说明了在现有的数据绑定结构中,BindingSource组件适合放在何处。
图10.3BindingSource组件的位置
10.1.3常用数据库访问方式
1..NETFramework的四种数据提供程序
.NETFramework中包含的.NETFramework数据提供程序有以下四种:
●SQLServer.NETFramework数据提供程序:
提供对MicrosoftSQLServer7.0版或更高版本的数据访问,使用System.Data.SqlClient命名空间。
●OLEDB.NETFramework数据提供程序:
适合于使用OLEDB公开的数据源。
使用System.Data.OleDb命名空间。
●ODBC.NETFramework数据提供程序:
适合于使用ODBC公开的数据源,使用System.Data.Odbc命名空间。
●Oracle.NETFramework数据提供程序:
适用于Oracle数据源,支持Oracle客户端软件8.1.7版和更高版本,使用System.Data.OracleClient命名空间。
在ADO.NET中,Windows平台下主要通过以上四种数据提供程序进行数据库访问,所以主要有四种数据访问模式:
OleDb模式、Odbc模式、SqlClient模式和OracleClient模式。
2..NETFramework数据提供程序的选择
根据应用程序的设计和数据源,正确地选择.NETFramework数据提供程序可以提高应用程序的性能、功能和完整性。
下面是.NETFramework数据提供程序的优点和限制:
●SQLServer.NETFramework数据提供程序:
建议用于使用MicrosoftSQLServer7.0或更高版本的中间层应用程序;建议用于使用Microsoft数据库引擎(MSDE)或SQLServer7.0或更高版本的单层应用程序;建议将用于SQLServer的OLEDB提供程序(SQLOLEDB)与OLEDB.NETFramework数据提供程序一起使用;对于SQLServer6.5版和较早版本,必须将用于SQLServer的OLEDB提供程序与OLEDB.NETFramework数据提供程序一起使用。
●OLEDB.NETFramework数据提供程序:
建议用于使用SQLServer6.5或较早版本的中间层应用程序;对于SQLServer7.0或更高版本,建议使用SQLServer.NETFramework数据提供程序;还建议用于使用MicrosoftAccess数据库的单层应用程序;不建议将Access数据库用于中间层应用程序。
●ODBC.NETFramework数据提供程序:
建议用于使用ODBC数据源的中间层和单层应用程序。
●Oracle.NETFramework数据提供程序:
建议用于使用Oracle数据源的中间层和单层应用程序。
10.2数据库的连接
任何对于数据库的操作都需要首先建立一个与该数据库的连接对象—Connection对象,Connection对象是.NET数据提供程序的一个组件,该组件提供了应用程序和数据库之间进行数据通信的功能。
10.2.1连接字符串
各种数据库提供程序提供的数据连接对象公开了大致相同的成员。
Connection对象的主要是属性是ConnectionString,该属性用于设置数据库连接字符串,连接字符串包含作为参数传递给数据源的初始化信息,在设置后会立即分析连接字符串,语法错误将生成运行时异常,但是只有在数据源验证了连接字符串中的信息后,才可以发现其它错误。
验证后,数据源设置启用该连接的各种选项。
对于不同的Connection对象,其连接字符串也有所不同。
下面是常见的几种数据连接字符串。
1.System.Data.SqlClient.SqlConnection对象的连接字符串
常用的一些连接字符串:
(1)SqlConnectionconn=newSqlConnection("Server=(local);IntegratedSecurity=SSPI;database=Pubs");
(2)SqlConnectionconn=newSqlConnection("server=(local)\\NetSDK;
database=pubs;IntegratedSecurity=SSPI");
(3)SqlConnectionconn=newSqlConnection("DataSource=localhost;IntegratedSecurity=SSPI;InitialCatalog=Northwind;");
(4)SqlConnectionconn=newSqlConnection(
"datasource=(local);initialcatalog=xr;integratedsecurity=SSPI;
persistsecurityinfo=False;workstationid=XURUI;packetsize=4096;");
(5)SqlConnectionconn=newSystem.Data.SqlClient.SqlConnection(
"PersistSecurityInfo=False;IntegratedSecurity=SSPI;database=northwind;
server=mySQLServer");
(6)SqlConnectionconn=newSqlConnection("uid=sa;pwd=passwords;initial
catalog=pubs;datasource=127.0.0.1;ConnectTimeout=900");
2.System.Data.Odbc.OleDbConnection对象的连接字符串
常用的一些连接字符串:
(1)OleDbConnectionconn=newOleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=*.mdb");
(2)OleDbConnectionconn=newOleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Password=;UserID=Admin;DataSource=grocertogo.mdb;");
(3)OleDbConnectionconn=newOleDbConnection("Provider=MSDAORA;DataSource=ORACLE8i7;PersistSecurityInfo=False;IntegratedSecurity=yes");
(4)OleDbConnectionconn=newOleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:
\bin\LocalAccess40.mdb");
(5)OleDbConnectionconn=newOleDbConnection("Provider=SQLOLEDB;DataSource=MySQLServer;IntegratedSecurity=SSPI");
3.System.Data.Odbc.OdbcConnection对象的连接字符串
常用的一些连接字符串:
(1)OdbcConnectionconn=newOdbcConnection("Driver={SQLServer};Server=MyServer;Trusted_Connection=yes;Database=Northwind;");
(2)OdbcConnectionconn=newOdbcConnection("Driver={MicrosoftODBCforOracle};Server=ORACLE8i7;PersistSecurityInfo=False;Trusted_Connection
=yes");
(3)OdbcConnectionconn=newOdbcConnection("Driver={MicrosoftAccessDriver(*.mdb)};DBQ=c:
\bin\nwind.mdb");
(4)OdbcConnectionconn=newOdbcConnection("Driver={MicrosoftExcelDriver(*.xls)};DBQ=c:
\bin\book1.xls");
(5)OdbcConnectionconn=newOdbcConnection("Driver={MicrosoftTextDriver(*.txt;*.csv)};DBQ=c:
\bin");
(6)OdbcConnectionconn=newOdbcConnection("DSN=dsnname");
4.System.Data.OracleClient.OracleConnection对象的连接字符串
常用的一些连接字符串:
OracleConnectionmyConn=newSystem.Data.OracleClient.
OracleConnection("DataSource=Oracle8i;IntegratedSecurity=yes");
10.2.2连接字符串说明
连接字符串的基本格式包括一系列由分号分隔的关键字/值对。
等号(=)连接各个关键字及其值。
若要包括含有分号、单引号字符或双引号字符的值,则该值需用转义字符。
若要在字符串值中包括前导或尾随空格,则该值必须用单引号或双引号括起来,即使将整数、布尔值或枚举值用引号括起来,其周围的任何前导或尾随空格也将被忽略,然而,保留字符串关键字或值内的空格。
若要在关键字或值中包括等号(=),则它之前必须还有另一个等号。
例如,在假设的连接字符串"key==word=value"中,关键字是“key=word”并且值是“value”。
如果关键字/值对中的一个特定关键字多次出现在连接字符串中,则将所列出的最后一个用于值集,关键字不区分大小写,表10.1列出了ConnectionString中的关键字值的有效名称。
表10.1ConnectionString中关键字值的有效名称与说明
关键字
默认值
说明
ApplicationName
N/A
应用程序的名称,或者“.NetSqlClientDataProvider”(如果不提供应用程序名称)。
Asynch
'false'
如果设置为true,则启用异步操作支持,可识别的值为true、false、yes和no。
AttachDBFilename
-或-
extendedproperties
-或-
InitialFileName
N/A
主数据库文件的名称,包括可连接数据库的完整路径名,该路经可以是绝对路径,也可以是相对路径,这取决于是否使用DataDirect
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 编程
![提示](https://static.bdocx.com/images/bang_tan.gif)