在ASP.NET 2.0中操作数据:使用SqlDataSource插入、更新以及删除数据
英文原版 | 本教程的代码(C#) | 翻译目录 | 原文目录
导言
在概述插入、更新和删除数据中我们讨论过,GridView控件提供了内建的更新与删除功能,而DetailsView和FormView控件除了这些之外还拥有插入功能。这些数据修改功能可以直接接入到数据源控件中而不需要编写任何代码。概述插入、更新和删除数据讲解了如何使用ObjectDataSource来帮助GridView、DetailsView以及FormView控件完成插入、更新以及删除操作。ObjectDataSource能工作的地方,SqlDataSource也行。
回忆一下,要使ObjectDataSource支持插入、更新和删除功能,我们需要定义一些用以执行插入、更新和删除动作的对象层方法。而在SqlDataSource中,我们则需要提供INSERT、UPDATE以及DELETE语句(或存储过程)。正如我们将要在本节教程中看到的那样,这些语句可以手工创建,也可以通过SqlDataSource的“配置数据源”向导自动生成。
注意:由于我们已经讨论过了GridView、DetailsView以及FormView控件的插入、编辑和删除功能,本教程中我们将重点讨论如何配置SqlDataSource以使其支持这些操作。如果你需要温习一下如何在GridView、DetailsView以及FormView中实现这个功能,请回到“编辑插入和删除数据”的章节,从概述插入、更新和删除数据开始。
第一步:指定INSERT、UPDATE以及DELETE语句
就像我们在上两节教程中看到的那样,要从SqlDataSource控件中获取数据,我们需要设置两个属性:
1. ConnectionString,它指定了查询应该发送到的那个数据库;
2. SelectCommand,它指定了用于返回记录的SQL语句或存储过程。
对于带参数的SelectCommand,其参数值通过SqlDataSource的SelectParameters集合来进行指定,可以包含硬编码值和通用参数源(比如QueryString、Session、Web控件等等),也可以通过编程的方式来对其进行赋值。当SqlDataSource控件的Select()方法被调用时(无论是通过编程来调用或是由数据Web控件自动调用),一个数据库连接将被建立,然后参数值被赋值给查询,然后command被发送到数据库。结果将以DataSet或DataReader的形式返回,具体的返回形式取决于这个控件的DataSourceMode属性的值。
除了获取数据之外,SqlDataSource还可以以非常相似的办法通过提供INSERT、UPDATE以及DELETE语句来插入、更新以及删除数据。只需简单的给InsertCommand、UpdateCommand以及DeleteCommand属性赋上INSERT、UPDATE以及DELETE语句就可以了。如果语句带有参数(这也是常有的事),把这些参数放到InsertParameters、UpdateParameters以及DeleteParameters集合里就可以了。
一旦InsertCommand、UpdateCommand或DeleteCommand的值被指定,相应数据Web控件的智能标签中的“允许插入”、“允许编辑”或“允许删除”选项将会变为可用。为了说明这个问题,我们就以在教程使用SqlDataSource 控件查询数据中创建的Querying.aspx为例,给它加上删除功能。
首先从SqlDataSource文件夹中打开InsertUpdateDelete.aspx和Querying.aspx。在Querying.aspx的设计器中选择第一个例子中的SqlDataSource和GridView(就是ProductsDataSource和GridView1)。选好了这两个控件之后,在“编辑”菜单中选择“复制”(或者直接Ctrl+C)。然后,到InsertUpdateDelete.aspx的设计器中,并将这两个控件粘贴上去。将这两个控件弄到InsertUpdateDelete.aspx上之后,在浏览器中测试一下这个页面。你应该看到Products表中所有记录的ProductID、ProductName以及UnitPrice。
图一:所有的产品都列出来了,并以ProductID 进行了排序
添加SqlDataSource的DeleteCommand以及DeleteParameters 属性
现在,我们拥有了一个简单的从Products表返回所有记录的SqlDataSource和一个用以显示这些数据的GridView。我们的目标是扩展这个例子以允许用户可以通过GridView来删除产品。要达到这个目标,我们需要给SqlDataSource控件的DeleteCommand以及DeleteParameters属性指定相关的值,并配置GridView以使其可以支持删除。
DeleteCommand以及DeleteParameters属性可以通过很多种方式进行指定:
·通过声明标记代码;
·通过设计器的属性窗口;
·通过“配置数据源”向导中的 “指定一个自定义SQL语句或存储过程”页;
· 通过“配置数据源”向导中的“指定一个表或视图中的列”页上面的“高级”按钮,它将自动的生成DELETE语句,并自动生成DeleteCommand以及DeleteParameters属性所使用到的那些参数集合。
我们将在第二步中解释如何自动创建一个DELETE语句。虽然“配置数据源”向导或声明标记代码也OK,不过现在我们还是使用设计器中的属性窗口。
在InsertUpdateDelete.aspx的设计器中,单击一下ProductsDataSource,然后打开属性窗口(在“视图”菜单中选择“属性窗口”,或直接按F4)。选择DeleteQuery属性。
图二:在属性窗口中选择DeleteQuery属性