正 文

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


www.7dspace.com  更新日期:2005-11-28 2:43:45  七度空间


通用指针

除了使用正确的方法来做正确的事之外,一些基本的最佳实践会让数据应用程序块在日常的编程工作中更加简单。

从Web.config里获得你的连接字符串

要注意在上面所有的例子里,我只使用了一个叫做connString的字符串变量。这是因为我在上面调用SqlHelper的代码里做了两件事。第一,在Web.config里,我创建了一个appSettings区,它可以通过System.Configuration类来访问:

<appSettings>
 <add  key="mainConnectionString"
value="Data Source=myDb;Initial Catalog=database;
user id=user1; password=pass1"/>
</appSettings>

第二,我使用这个配置文件里的关键字对connString变量进行了初始化。要记住在你的组件里参照System.Configuration命名空间。

using System.Configuration;
string connString =
ConfigurationSettings.AppSettings["mainConnectionString"];

使用存储过程

虽然任何人都可以使用带有数据访问块的内嵌SQL,但是不要使用!参数重载(parameter overload)稍稍有所不同,因为你需要指定一个命令类型。存储过程是组件所缺省的,所以你可以在使用的时候忽略它们,但是对内嵌SQL就不行。

SqlHelper.ExecuteNonQuery(connString, CommandType.Text,
 "DELETE FROM table1 WHERE rowId = " + rowId);

为什么你不应该这么做?嗯,除了糟糕的设计考虑,你已经将自己暴露于潜在的SQL流量注入攻击(SQL injection attack)之下。有了数据访问应用程序块,我就不再需要再次连接SQL字符串了,所以让我们就不这么做吧。

如果你准备使用DataSet,真正地用好它们

DataSet 的好处在于,它们是无状态系统(stateless system)关系型数据在内容中的表现。如果你有这样一个系统,它将雇员的眼睛颜色和头发颜色保存在关系表里,我们就可以只使用一个存储过程来获取所有的信息,然后将ListBox绑定到由SELECT所创建的辅助表格上。这个集中过程(aggregated procedure)就像下面这样:

--Table 0
SELECT HairColorId, EyeColorId
FROM Employees
WHERE rowId = @RowId;
--Table 1
SELECT HairColorId, HairColor
FROM HairColors
--Table 2
SELECT EyeColorId, EyeColor
FROM EyeColors

使用数据应用程序块来获取一个DataSet。

DataSetdataSet = SqlHelper.ExecuteDataset(connString,
 "usp_GetEmployeeColors", rowId)

然后,你就可以将ListBox绑定到第二和第三个表格上。下面是眼睛颜色的ListBox:

EyeColorListBox.DataSource = dataSet.Tables[2].DefaultView;
EyeColorListBox.DataTextField = "EyeColor";
EyeColorListBox.DataValueField = "EyeColorId";
EyeColorListBox.DataBind();
EyeColorListBox.Items.FindByValue(
dataSet.Tables[0].Rows[0]["EyeColorId"].ToString())
.Selected = true;

完成

我们没有历数数据访问应用程序块的所有功能,但是就本文而言,这已经足够了。很多应该使用数据访问应用程序块的开发人员因为其复杂性而没有使用它。在阅读完本篇对其最有用的特性的概述之后,每个人都应该能够开始使用这个由微软所提供的免费代码了。

2页,页码:[1] [2] 

上一篇:在组件中使用服务器时钟
下一篇:vb:建立自定义属性以提供程序信息
作者:  来源:开发者在线 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐