使用数据访问应用程序块简化.NET的SQL查询

ZDNet软件频道 时间:2003-07-29 作者:ZDNet China |  我要评论()
本文关键词:
尽管微软的.NET应用程序块的文档工作做得非常好,但是却难以找到能够让它在每天的基本工作中更好用的提示和技巧。本文收集了一些让数据访问应用程序块在日常的.NET/SQL服务器项目中更易使用的代码。
本文译自Builder.com,未经许可请勿转载尽管微软的.NET应用程序块(Application Block)的文档工作做得非常好,但是却难以找到能够让它在每天的基本工作中更好用的提示和技巧。本文收集了一些让数据访问应用程序块(Data Access Application Block)在日常的.NET/SQL服务器项目中更易使用的代码。

让我们开始吧

你可以从MSDN下载数据访问应用程序块。在加载项目之前,你要先安装这个工具包,并使用Visual Studio .NET 2002或者2003确实地创建组件。你还必须参照已经创建的DLL,它们位于项目参照(References)菜单里/bin/directory下。最后,每个文件或者表单都需要一个组件参照(assembly reference),如下所示:
using Microsoft.ApplicationBlocks.Data;

基本用法

数据访问应用程序块的主类(principal class)是SQLHelper,它是一个带有四个常用(和几个不太常用)方法的封装类(sealed class):

  • ExecuteDataset会利用SQL查询生成一个DataSet。
  • ExecuteReader会利用SQL查询生成一个SqlDataReader。
  • ExecuteScalar会利用SQL查询生成一个单值对象。
  • ExecuteNonQuery会运行一个不带有返回值的SQL查询。

现在让我们来仔细看每一个方法。

ExecuteDataset
ExecuteDataset会运行你的基本SELECT(选择)查询并生成一个DataSet,然后后者就能够被绑定到服务器对象上,或者被用来创建DataView。就和所有的方法一样,存在着很多重载,但是最常用的一个看起来像下面这样:
DataSetdataSet = SqlHelper.ExecuteDataset(connString,
 "usp_GetStuffProcedure", parameter)


在通常情况下,你要使用一个RowId或者一个搜索参数将SELECT查询的DataSet填满。上面的参数桶(parameter bucket)会接受大量的参数,所以即使你传递进来(比如说)三个搜索参数,你也只需要像下面这样:
DataSetdataSet = SqlHelper.ExecuteDataset(connString,
 "usp_SearchStuffProcedure", parameter1, parameter2, parameter3)


ExecuteReader
ExecuteReader也是用于SELECT陈述式的,但是它通常是为性能真正至关重要的情况而保留的。SqlDataReaders很类似于经典ADO里的只能向前的只读记录集,它们对于填充ListBoxe和CheckBoxList很有用处。但是在你尽全力调用300个SqlDataReader来填充动态控件之前,你最好看看我在下面“通用指针”这一部分里所给出的最终建议。

对ExecuteReader的调用看起来就像是一个ExecuteDataset。要记住,你需要一个对System.Data.SqlClient组件进行参照才能够对SQL服务器数据库使用SqlDataReader:
using System.Data.SqlClient;
SqlDataReadersqlDataReader = SqlHelper.ExecuteReader(connString,
 "usp_GetStuffProcedure", parameter);


ExecuteScalar
ExecuteScalar方法有多种用法,比如返回一个只带有一个值(例如COUNT)的SELECT查询。但是最常用的方法是运行一个能够返回新的行ID的INSERT陈述式。这是Transact SQL里相当常见的技巧,但是它需要使用存储过程里的一个CAST,以确保所返回的行ID是.NET最容易接受的格式:
INSERT (ColumnName1, ColumnName2) VALUES (@parameter1, @parameter2)
SELECT CAST(@@Identity AS INTEGER)


为了让事情简单,这个值就要作为一个Object(对象)返回给.NET。为了让行ID以整数返回,你要使用Convert(转换)陈述式。
intnewRowId = Convert.ToInt32(SqlHelper.ExecuteScalar(connString,
 "usp_InsertStuffProcedure",
 parameter1,
 parameter2));


ExecuteNonQuery
你要使用ExecuteNonQuery方法来运行其它所有的东西——UPDATE、DELETE,以及功能查询或者清理查询(functional or housekeeping queries)——它们不会返回任何值。再强调一遍,它就和其他的方法一样,将连接字符串、存储过程和参数作为自变量来处理。
SqlHelper.ExecuteNonQuery(connString,"usp_DeleteStuffProcedure",
 rowIdToDelete);


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134