你可以从MSDN下载数据访问应用程序块。在加载项目之前,你要先安装这个工具包,并使用Visual Studio .NET 2002或者2003确实地创建组件。你还必须参照已经创建的DLL,它们位于项目参照(References)菜单里/bin/directory下。最后,每个文件或者表单都需要一个组件参照(assembly
reference),如下所示:
using Microsoft.ApplicationBlocks.Data;
数据访问应用程序块的主类(principal class)是SQLHelper,它是一个带有四个常用(和几个不太常用)方法的封装类(sealed class):
现在让我们来仔细看每一个方法。
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);