NET高级软件工程师培养之数据访问帮助器组件设计
.NET高级软件工程师培养之数据访问层组件设计
---------数据访问帮助器的实现
编辑整理:龚芳海
gfh12180@https://www.360docs.net/doc/ab12218281.html,
摘要:数据访问应用程序块(Data Access Application Block) 是一个 .NET 组件,它包含经过优化的数据访问代码,可以帮助用户调用存储过程以及向 SQL Server 数据库发出 SQL 文本命令。它返回 SqlDataReader、DataSet 和XmlReader 对象。您可以在自己的基于 .NET 的应用程序中将其作为构造块来使用,以减少需要创建、测试和维护的自定义代码的数量。您可以下载完整的Visual C# 和Visual Basic .NET 源代码以及综合文档。
注意,本文档引用了一些仅在数据访问应用程序块的 2.0 版本中提供的功能。
简介
您是否正在从事基于 .NET 的应用程序数据访问代码的设计和开发工作?您是否曾经有过这种感觉 — 总是觉得自己在反复编写相同的数据访问代码?您是否曾经将数据访问代码包装在 Helper 函数中,以便能够在一行中调用存储过程?如果是,那么Microsoft? Data Access Application Block for .NET 正是您所需要的。
数据访问应用程序块将有关访问 Microsoft SQL Server 数据库的性能和资源管理方面的最佳做法封装在一起。您可以很方便地在自己的基于 .NET 的应用程序中将其作为构造块使用,从而减少需要创建、测试和维护的自定义代码的数量。
特别是,数据访问应用程序块可以帮助您:
?调用存储过程或 SQL 文本命令。
?指定参数详细信息。
?返回SqlDataReader、DataSet或XmlReader对象。
?使用强类型的DataSet。
例如,在引用了数据访问应用程序块的应用程序中,您可以在一行代码中调用存储过程并生成DataSet,如下所示:
[Visual Basic]
Dim ds As DataSet = SqlHelper.ExecuteDataset( _
connectionString, _
CommandType.StoredProcedure, _
"getProductsByCategory", _
new SqlParameter("@CategoryID", categoryID))
[C#]
DataSet ds = SqlHelper.ExecuteDataset(
connectionString,
CommandType.StoredProcedure,
"getProductsByCategory",
new SqlParameter("@CategoryID", categoryID));
注:.NET 的应用程序块是在对成功的基于 .NET 的应用程序进行详细研究的基础上设计的。它以源代码的形式提供,您可以原样使用,也可以针对自己的应用程序进行自定义。该应用程序块并不代表未来 Microsoft https://www.360docs.net/doc/ab12218281.html, 程序库的发展方向。Microsoft https://www.360docs.net/doc/ab12218281.html, 程序库是为在各种使用情况下实现对数据访问行为的精确控制而生成的。将来的 https://www.360docs.net/doc/ab12218281.html, 版本可能会使用不同的模型来实现这个方案。
本概述的其余部分包括以下内容:
本页内容
数据访问应用程序块包括哪些内容?
下载和安装数据访问应用程序块
使用数据访问应用程序块
内部设计
常见问题
数据访问应用程序块包括哪些内容?
提供了数据访问应用程序块的源代码以及快速入门示例应用程序,您可以使用这些应用程序测试其功能。数据访问应用程序块还包括综合文档,可以帮助您使用和了解所提供的代码。
Visual Studio .NET 项目
提供了数据访问应用程序块的Microsoft Visual Basic? .NET 和 Microsoft Visual C#? 源代码,以及每种语言的快速入门示例客户端应用程序,您可以使用这些应用程序测试通用的方案。这有助于加深您对数据访问应用程序块的工作原理的了解。您还可以自定义源代码以满足自己的需要。
您可以编译 Visual Basic 和 C# Microsoft.ApplicationBlocks.Data 项目,以生成一个名为Microsoft.ApplicationBlocks.Data.dll 的程序集。该程序集包括一个名为SqlHelper的类(其中包含用于执行数据库命令的核心功能)和一个名为SqlhelperParameterCache的类(它提供参数发现和缓存功能)。
文档
数据访问应用程序块的文档主要包括以下内容:
?使用数据访问应用程序块开发应用程序。本部分包含一些快速入门示例,涵盖了许多常见的用例。这些示例可以帮助您快速而方便地开始使用数据访问应用程序块。
?数据访问应用程序块的设计与实现。本部分包括背景设计原理信息,以便用户深入了解数据访问应用程序块的设计与实现。
?部署和运行。本部分包括安装信息,其中包含部署和更新选项以及与安全性有关的信息。
?参考。本部分包含完整的 API 参考资料,其中介绍了构成数据访问应用程序块的类和接口。
系统要求
要运行Data Access Application Block 版本 2.0,您需要满足以下条件:?Microsoft Windows?2000、Windows XP Professional 或 Windows
2003 操作系统
?Microsoft .NET 框架软件开发工具包 (SDK) 版本 1.1、版本 1.1 ?Microsoft Visual Studio?2003 开发系统
?运行 SQL Server 7.0 或更高版本的数据库服务器
要运行Data Access Application Block 版本 1.0,您需要满足以下条件:?Microsoft Windows 2000 或Windows XP Professional
?.NET 框架 SDK 的 RTM 版本
?Visual Studio .NET 的 RTM 版本(推荐,但不必需)
?运行 SQL Server 7.0 或更高版本的数据库服务器
返回页首
下载和安装数据访问应用程序块
您可以获取一个包含已签名的数据访问应用程序块程序集和综合文档的Windows 安装程序文件。
安装进程将在您的Programs菜单中创建一个Microsoft Application Blocks for .NET子菜单。在Microsoft Application Blocks for .NET 子菜单上,有一个Data Access 子菜单,它包含用于启动文档和启动 Data Access Application Block Visual https://www.360docs.net/doc/ab12218281.html, 解决方案的选项。
您可以从Microsoft Download Center下载Data Access Application Block 版本 1.0
您可以从Microsoft Download Center下载Data Access Application Block 版本 2.0
返回页首
使用数据访问应用程序块
本节讨论如何使用数据访问应用程序块来执行数据库命令和管理参数。图 1 显示了数据访问应用程序块的主要元素。
图1. 数据访问应用程序块
SqlHelper类提供了一组静态方法,可以用来对 SQL Server 数据库执行多种不同类型的命令。
SqlHelperParameterCache类提供命令参数缓存功能,可以用来提高性能。该类由许多Execute方法(尤其是那些只执行存储过程的重载方法)在内部使用。数据访问客户端也可以直接使用它来缓存特定命令的特定参数集。
使用 SqlHelper 类执行命令
SqlHelper类提供了 13 个Shared (Visual Basic) 或static (C#) 方
法,如上图所示。实现的每种方法都提供一组一致的重载。这提供了一种很好的使用SqlHelper类来执行命令的定义模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人
员可以确定传递连接、事务和参数信息的方式。类中实现的所有方法都支持以下重载:
[Visual Basic]
Execute* (ByVal connection As SqlConnection, _
ByVal commandType As CommandType, _
ByVal CommandText As String)
Execute* (ByVal connection As SqlConnection, _
ByVal commandType As CommandType, _
ByVal commandText As String, _
ByVal ParamArray commandParameters() As SqlParameter)
Execute* (ByVal connection As SqlConnection, ByVal spName As String, _
ByVal ParamArray parameterValues() As Object)
Execute* (ByVal transaction As SqlTransaction, _
ByVal commandType As CommandType, _
ByVal commandText As String)
Execute* (ByVal transaction As SqlTransaction, _
ByVal commandType As CommandType, _
ByVal commandText As String, _
ByVal ParamArray commandParameters() As SqlParameter)
Execute* (ByVal transaction As SqlTransaction, _
ByVal spName As String, _
ByVal ParamArray parameterValues() As Object)
[C#]
Execute* (SqlConnection connection, CommandType commandType,
string commandText)
Execute* (SqlConnection connection, CommandType commandType,
string commandText, params SqlParameter[] commandParameters)
Execute* (SqlConnection connection, string spName,
params object[] parameterValues)
Execute* (SqlConnection connection,
CommandType commandType, string commandText)
Execute* (SqlConnection connection,
CommandType commandType, string commandText,
params SqlParameter[] commandParameters)
Execute* (SqlConnection connection,
string spName, params object[] parameterValues)
除了这些重载以外,所有方法(ExecuteXmlReader、UpdateDataset和CreateCommand除外)都提供了重载,以允许连接信息作为连接字符串而不是作为连接对象传递,如下面的方法签名所示:
[Visual Basic]
Execute* (ByVal connectionString As String, _
ByVal commandType As CommandType, _
ByVal commandText As String)
Execute* (ByVal connectionString As String, _
ByVal commandType As CommandType, _
ByVal commandText As String, _
ByVal ParamArray commandParameters() As SqlParameter)
Execute* (ByVal connectionString As String, ByVal spName As String, _
ByVal ParamArray parameterValues() As Object)
[C#]
Execute* (string connectionString, CommandType commandType, string commandText)
Execute* (string connectionString, CommandType commandType, string commandText,
params SqlParameter[] commandParameters)
Execute* (string connectionString, string spName,
params object[] parameterValues)
注ExecuteXmlReader不支持连接字符串,这是因为与SqlDataReader 对象不同,在关闭XmlReader时,XmlReader对象不提供自动关闭连接的方法。如果客户端传递了连接字符串,那么当客户端完成对XmlReader的操作后,将无法关闭与XmlReader相关联的连接对象。UpdateDataset 使用已有的连接,而CreateCommand使用SqlConnection对象。
通过引用数据访问应用程序块程序集并导入
Microsoft.ApplicationBlocks.Data 命名空间,您可以编写使用任何一种SqlHelper 类方法的代码,如下面的代码示例所示:
[Visual Basic]
Imports Microsoft.ApplicationBlocks.Data
[C#]
using Microsoft.ApplicationBlocks.Data;
导入该命名空间后,您可以调用任何 Execute* 方法,如下面的代码示例所示:[Visual Basic]
Dim ds As DataSet = SqlHelper.ExecuteDataset( _
"SERVER=(local);DATABASE=Northwind;INTEGRATED SECURITY=True;", _
CommandType.Text, "SELECT * FROM Products")
[C#]
DataSet ds = SqlHelper.ExecuteDataset(
"SERVER=DataServer;DATABASE=Northwind;INTEGRATED SECURITY=sspi;",
CommandType.Text, "SELECT * FROM Products");
使用 SqlHelperParameterCache 类管理参数
SqlHelperParameterCache类提供了三个可以用来管理参数的公共共享方法。它们是:
?CacheParameterSet。用于将SqlParameters数组存储到缓存中。?GetCachedParameterSet。用于检索缓存的参数数组的副本。?GetSpParameterSet。一种重载方法,用于检索指定存储过程的相应参数(首先查询一次数据库,然后缓存结果以便将来查询)。
缓存和检索参数
通过使用CacheParameterSet方法,可以缓存SqlParameter对象数组。此方法通过将连接字符串和命令文本连接起来创建一个键,然后将参数数组存储在Hashtable中。
为了从缓存中检索参数,使用了GetCachedParameterSet方法。此方法返回一个SqlParameter对象数组,这些对象已使用特定缓存(该缓存与传递给该方法的连接字符串和命令文本相对应)中参数的名称、方向和数据类型等进行了初始化。
注用作参数集的键的连接字符串通过简单的字符串比较进行匹配。用于从GetCachedParameterSet中检索参数的连接字符串必须与用来通过CacheParameterSet来存储这些参数的连接字符串完全相同。语法不同的连接字符串即使语义相同,也不会被认为是匹配的。
以下代码显示了如何使用SqlHelperParameterCache类来缓存和检索Transact-SQL 语句的参数。
[Visual Basic]
'Initialize the connection string and command text
'These will form the key used to store and retrieve the parameters
Const CONN_STRING As String = _
"SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;"
Dim sql As String = _
"SELECT ProductName FROM Products WHERE CategoryID=@Cat " + _
"AND SupplierID = @Sup"
'Cache the parameters
Dim paramsToStore(1) As SqlParameter
paramsToStore(0) = New SqlParameter("@Cat", SqlDbType.Int) paramsToStore(1) = New SqlParameter("@Sup", SqlDbType.Int) SqlHelperParameterCache.CacheParameterSet(CONN_STRING, sql, _
paramsToStore)
'Retrieve the parameters from the cache
Dim storedParams(1) As SqlParameter
storedParams =
SqlHelperParameterCache.GetCachedParameterSet(
CONN_STRING, sql) storedParams(0).Value = 2
storedParams(1).Value = 3
'Use the parameters in a command
Dim ds As DataSet
ds = SqlHelper.ExecuteDataset(CONN_STRING, CommandType.Text, sql, _
storedParams)
[C#]
// Initialize the connection string and command text
// These will form the key used to store and retrieve the parameters
const string CONN_STRING =
"SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;";
string spName =
"SELECT ProductName FROM Products WHERE CategoryID=@Cat " + "AND SupplierID = @Sup";
//Cache the parameters
SqlParameter[] paramsToStore = new SqlParameter[2]; paramsToStore[0] = New SqlParameter("@Cat", SqlDbType.Int); paramsToStore[1] = New SqlParameter("@Sup", SqlDbType.Int); SqlHelperParameterCache.CacheParameterSet(CONN_STRING, sql,
paramsToStore);
//Retrieve the parameters from the cache
SqlParameter storedParams = new SqlParameter[2]; storedParams =
SqlHelperParameterCache.GetCachedParameterSet(
CONN_STRING, sql); storedParams(0).Value = 2;
storedParams(1).Value = 3;
//Use the parameters in a command
DataSet ds;
ds = SqlHelper.ExecuteDataset(CONN_STRING,
CommandType.StoredProcedure,
sql, storedParams);
检索存储过程参数
SqlHelperParameterCache还提供了针对特定存储过程检索参数数组的方法。一个名为GetSpParameterSet的重载方法提供了此功能,它包含两种实现。该方法尝试从缓存中检索特定存储过程的参数。如果这些参数尚未被缓存,则使用 .NET SqlCommandBuilder类从内部检索,并将它们添加到缓存中以用于后续的请求。然后,为每个参数指定相应的参数设置,最后将这些参数以数组形式返回给客户端。以下代码显示了如何检索 Northwind 数据库中SalesByCategory存储过程的参数。
[Visual Basic]
'Initialize the connection string and command text
'These will form the key used to store and retrieve the parameters
Const CONN_STRING As String = _
"SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;"
Dim spName As String = "SalesByCategory"
'Retrieve the parameters
Dim storedParams(1) As SqlParameter
storedParams =
SqlHelperParameterCache.GetSpParameterSet(CONN_STRING, spName)
storedParams(0).Value = "Beverages"
storedParams(1).Value = "1997"
'Use the parameters in a command
Dim ds As DataSet
ds = SqlHelper.ExecuteDataset(CONN_STRING, _
CommandType.StoredProcedure, _ spName, storedParams)
[C#]
// Initialize the connection string and command text
/ These will form the key used to store and retrieve the parameters
const string CONN_STRING =
"SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;";
string spName = "SalesByCategory";
// Retrieve the parameters
SqlParameter storedParams = new SqlParameter[2]; storedParams =
SqlHelperParameterCache.GetSpParameterSet(CONN_STRING, spName); storedParams[0].Value = "Beverages";
storedParams[1].Value = "1997";
//Use the parameters in a command
DataSet ds;
ds = SqlHelper.ExecuteDataset(CONN_STRING, CommandType.StoredProcedure,
spName, storedParams);
返回页首
内部设计
数据访问应用程序块包含了完整的源代码和有关其设计的综合指南。本节介绍有关主要实现的详细信息。
SqlHelper 类实现详细信息
SqlHelper类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。
在SqlHelper类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用SqlHelper类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。在SqlHelper类中实现的方法包括:
?ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。?ExecuteReader。此方法用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集。
?ExecuteDataset。此方法返回DataSet对象,该对象包含由某一命令返回的结果集。
?ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。
?ExecuteXmlReader。此方法返回FOR XML查询的 XML 片段。?FillDataset。此方法类似于ExecuteDataset,不同之处在于可以传入预先存在的DataSet,从而允许添加附加表。
?UpdateDataset。此方法使用现有的连接和用户指定的更新命令来更新DataSet。它通常与CreateCommand命令结合使用。?CreateCommand。此方法允许提供存储过程和可选参数,从而简化了SQL 命令对象的创建过程。此方法通常与UpdateDataset结合使用。?ExecuteNonQueryTypedParams。此方法使用数据行而不是参数来执行非查询操作。
?ExecuteDatasetTypedParams。此方法使用数据行而不是参数来执行DataSet创建操作。
?ExecuteReaderTypedParams。此方法使用数据行而不是参数来返回数据读取器。
?ExecuteScalarTypedParams。此方法使用数据行而不是参数来返回标量。
?ExecuteXmlReaderTypedParams。此方法使用数据行而不是参数来执行XmlReader。
除了这些公共方法以外,SqlHelper类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过使用SqlCommand对象来执行。在执行此SqlCommand对象之前,必须将所有参数添加到它的Parameters集合中,并且必须相应地设置Connection、CommandType、CommandText和Transaction属性。SqlHelper类中的专用函数主要用于提供一种一致的方式,以便对 SQL Server 数据库执行命令,而不考虑客户端应用程序所调用的重载方法实现。SqlHelper类中的专用实用工具函数包括:
?AttachParameters。该函数用于将任何需要的SqlParameter对象附加到要执行的SqlCommand。
?AssignParameterValues。该函数用于向SqlParameter对象赋值。?PrepareCommand。该函数用于对命令的属性(如连接、事务上下文等)进行初始化。
?ExecuteReader。ExecuteReader的这一专用实现用于打开SqlDataReader对象,并使用相应的CommandBehavior以最有效的方式来管理与该读取器关联的连接的生命期。SqlHelperParameterCache 类实现详细信息
参数数组缓存在专用的Hashtable中。从缓存中检索的参数在内部进行复制,这样客户端应用程序能够更改参数值以及进行其他操作,而不会影响缓存的参数数组。专用共享函数CloneParameters用于实现此目的。
返回页首
常见问题
此版本包含哪些新增功能?
Data Access Application Block 的 2.0 版本包含以下新增功能:
?使用FillDataset方法支持强类型的DataSet
?支持将对DataSet的更新提交回数据库
?提供了附加 Helper 方法,并支持DataRow类型参数
?只须修复小的错误
与Data Access Application Block Beta 2.0 版本相比,该 RTM 版本包含以下新增功能和变化:
?SqlHelper类方法的事务型重载不再需要SqlConnection参数。在此版本中,连接信息从SqlTransaction对象中派生,因此不必在方法签名中包含SqlConnection对象参数。
?GetSpParameterSet方法现在使用 https://www.360docs.net/doc/ab12218281.html, CommandBuilder 类的DeriveParameters方法来确定存储过程所需的参数。这比 Beta 2.0 版本中直接通过查询数据库来检索信息效率更高。
可以使用 XCOPY 部署方法来部署数据访问应用程序块程序集吗?
可以。编译后,可以使用xcopy来部署
Microsoft.ApplicationBlocks.Data.dll程序集。
什么时候应该使用 ExecuteDataset 方法,什么时候应该使用ExecuteReader 方法?
这个问题实际上是什么时候应该在DataSet对象中返回多行数据,什么时候应该使用DataReader。答案取决于您的应用程序的特定需要,以及您在灵活性和原始性能之间的取舍。DataSet可以为数据提供一种灵活的、断开的关系视图,而DataReader在这方面则提供了一种具有极高性能、只读功能和只进的游标。
如果您使用参数数组来返回输出值,请记住您必须在关闭SqlDataReader 对象后提取这些值(使用SqlParameter值属性)。
有关DataSets和DataReaders的全面比较,请参阅《数据访问结构指南》,网址为:
https://www.360docs.net/doc/ab12218281.html,/library/default.asp?url=/library/en-us/d nbda/html/daag.asp。
什么时候应该使用 Execute*TypedParams 方法?
这些方法旨在利用对强类型DataSet的支持。使用它们可以将整个类型化的数据行作为存储过程的参数进行传递,而不是作为通常映射到表中所有域的所有参数的数组进行传递。
如何使用 ExecuteDataset 返回包含多个表的数据集?
通过创建一个可以返回多个行集的存储过程(通过执行多个SELECT语句,或者通过对其他存储过程进行嵌套调用),并使用ExecuteDataset方法执行该过程,您可以检索包含多个表的DataSet。
例如,假设您的数据库包含以下存储过程。
CREATE PROCEDURE GetCategories
AS
SELECT * FROM Categories
GO
CREATE PROCEDURE GetProducts
AS
SELECT * FROM Products
您可以创建一个主存储过程来对这些过程进行嵌套调用,如下面的代码示例所示。
CREATE PROCEDURE GetCategoriesAndProducts
AS
BEGIN
EXEC GetCategories
EXEC GetProducts
END
使用ExecuteDataset方法执行此主存储过程,会返回包含两个表的单个DataSet,一个表包含类别数据,另一个表包含产品数据。
注ExecuteDataset方法没有提供将自定义名称赋给返回的表的方法。第一个表的编号始终为0,并且名为Table,第二个表的编号始终为1,并且名为Table1,依此类推。
ADONET数据库访问技术的应用实验报告
课程名称网站设计与WEB编程实验名称https://www.360docs.net/doc/ab12218281.html,数据库访问技术的应用一、实验目的 1.了解https://www.360docs.net/doc/ab12218281.html,的结构,掌握https://www.360docs.net/doc/ab12218281.html,控件的功能和应用方法。 2.灵活应用SQL语句对数据库或数据表进行操作。 3.掌握数据控件的功能和应用方法。 4.了解前台界面与后台数据库的关系,掌握通过前台对后台的操作方法。 二、实验设备 PC机一台。 三、实验内容 1.设计数据库表结构,编程实现数据的浏览、查询、录入、修改和删除功能。 四、实验要求 1.设计一个数据库,数据库中至少有一个学生数据表,(包含的数据库字段有学号、姓名、专业、班级、性别),选取合适的字段设置为主键,并手工在数据库表中添加若干条记录。 2.用多种方法建立前台界面与数据库的连接。 3.在后台编写代码将数据显示在GridView控件中。 4.设计数据查询界面,能根据班级、专业等字段查询数据记录。 5.选用合适的控件设计学生信息录入界面,后台代码编程实现数据表中记录的增加、修改和删除功能。 6.思考如果以学号作为主键,录入学号时,如何验证学号的唯一性? 7.思考为什么要将数据库连接字符串放在Web.config文件中? 8.完成实验报告。 五、实验内容 1.新建一个数据库stu,并设置主键
2.新建空白网页,添加sqldatasource控件,并设置数据源为之前新建的数据库,用sql身份验证,再加入gridview控件,设置数据源为sqldatasource1,启用分页选择等属性 3.网页运行结果
4.设计查询窗口 5.查询测试结果 查询窗口和显示窗口的代码
6.信息录入界面,使用detailsview控件与数据库关联
数据库访问技术简介
数据库访问技术简介 数据库中的数据存放在数据库文件中,我们要从数据库文件中获取数据,先要连接并登陆到存放数据库的服务器。一般来说,访问数据库中的数据有两种方式:一是通过DBMS (Data Base Management System,数据库管理系统)提供的数据库操作工具来访问,如通过SQL Server 2000的查询设计器来提交查询,或者通过SQL Server 2000的企业管理工具来访问。这种方式比较适合DBA对数据库进行管理;二是通过API(Application Programming Interface, 应用编程接口)来访问数据库,这种方式适合在应用程序中访问数据库。 在数据库发展的初期,各个开发商为自己的数据库设计了各自不同的DBMS,因此不同类型的数据库之间数据交换非常困难。为了解决这个问题,Microsoft提出了ODBC(Open Data Base Connectivity,开放数据库互连)技术,试图建立一种统一的应用程序访问数据库接口,使开发人员无需了解程序内部结构就可以访问数据库。 1、Microsoft提出的系列数据库访问技术 1.1、ODBC ODBC是微软公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API。应用程序可以使用所提供的API来访问任何提供了ODBC驱动程序的数据库。ODBC规范为应用程序提供了一套高层调用接口规范和基于动态链接的运行支持环境。ODBC已经成为一种标准,目前所有的关系数据库都提供了ODBC 驱动程序,使用ODBC开发的应用程序具有很好的适应性和可移植性,并且具有同时访问多种数据库系统的能力。这使得ODBC的应用非常广泛,基本可用于所有的关系数据库。 要使用ODBC,先要了解以下概念:ODBC驱动管理器、ODBC驱动程序、数据源。它们都是ODBC的组件。ODBC组件之间的关系如图1所示。
ADONET访问数据库技术的方法及步骤
1 https://www.360docs.net/doc/ab12218281.html, 访问数据库技术的方法及步骤 徐照兴1 (江西服装职业技术学院,江西 南昌 330201) 摘 要:文中以访问SQL Server 数据库为例,以C#为编程语言,精简的描述了https://www.360docs.net/doc/ab12218281.html, 访问数据库技术的方法及步骤,并给出了相应的核心代码。 关键词:https://www.360docs.net/doc/ab12218281.html, C# 数据库 SQL Server 方法 1 徐照兴,1979-8,硕士,讲师,江西服装职业技术学院服装商贸学院,主要研究领域:数据库应用,web 开发 对数据库的访问是各种数据库应用程序开发的核心技术,.NET 框架中提出的https://www.360docs.net/doc/ab12218281.html, 技术屏蔽了各种数据库的差异性,为应用程序的开发提供了一致的接口,增强了程序的可移植性和可扩展性,本文给出以https://www.360docs.net/doc/ab12218281.html, 访问SQL Server 数据库为例,基于C#语言描述的https://www.360docs.net/doc/ab12218281.html, 访问数据库技术的方法、步骤及核心代码,以期为.NET 从业人员提供帮助。 1 使用连接对象Connection 连接数据源 连接对象的作用是在应用程序与指定的数据库之间建立连接,这是访问数据库的第一步。核心代码如下: using System.Data; //引入包含基本数据访问类的https://www.360docs.net/doc/ab12218281.html, 基本命名空间 using System.Data.SqlClient;//引入包含SQLServer 数据提供程序的命名空间 SqlConnection myconn = new SqlConnection();//定义并实例化一个Connection 对象 myconn.ConnectionString ="Server=数据库服务器名;DataBase=数据名;Uid=用户名;Pwd=密码";//使用SQL Server 用户登录验证方式连接数 据库 myconn.Open();//根据连接字符串,打开指定的数据库 注意: (1)若使用windows 验证方式连接数据库,连接的字符串如下: myconn.ConnectionString="Data Source=数据库服务器名;initial catalog=数据库名;persist security info=false;Integrated Security=SSPI"; (2)当数据库使用完毕后要及时关闭数据库的连接,即myconn.Close(); 2 使用命令对象Command 执行SQL 语句或存储过程操纵数据库 数据库连接打开后,接下来的工作就是操纵数据库,操纵数据库需要使用SQL 语句或存储过程,而https://www.360docs.net/doc/ab12218281.html, 数据提供程序中的Command 对象就可以用来实现对数据库的操纵了。核心代码如下: string sqlstr = " ";//引号内为SQL 语句或存储过程(也即是要如何操纵数据库) SqlCommand mycmd = new SqlCommand(sqlstr, myconn);//定义并实例化一个Command 对象