加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在ASP.NET 2.0中操作数据之四十七:用SqlDataSource控件插入、更

发布时间:2016-11-22 17:57:35 所属栏目:MsSql教程 来源:网络整理
导读:导言: 正如在教程概述插入、更新和删除数据里讨论的那样,GridView控件内置更新和删除功能,而DetailsView和FormView控件不仅具有编辑和删除功能,还有插入功能。我们不要写一行代码就可一将这些功能直接应用于一个数据源控件。在这篇教程里,我们指出Obj

在“编辑命令和参数”对话框里键入相关删除信息后,点“OK”按钮。进代码模式查看代码:

<asp:SqlDataSource ID="ProductsDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
SelectCommand=
 "SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]"
DeleteCommand="DELETE FROM Products WHERE ProductID = @ProductID">
<DeleteParameters>
 <asp:Parameter Name="ProductID" />
</DeleteParameters>
</asp:SqlDataSource>

设置GridView控件以支持删除功能

  设置了DeleteCommand属性后,GridView控件的智能标签里便可包含删除选项。就像在教程概述插入、更新和删除数据里探讨的一样,点击该按钮将促使GridView控件增加一个CommandField列,同时将ShowDeleteButton属性设置为true。就像在图4展示的那样,当通过浏览器访问该页面时,GridView控件将包含一个删除按钮。

/uploads/allimg/c161121/14OI93PaH0-3LU5.gif
图4:在GridView控件中,每一行记录都包含一个删除按钮

  点击删除按钮后,将发生postback事件,GridView控件将该行记录的DataKeys值赋值给参数ProductID,并调用SqlDataSource控件的Delete()方法。SqlDataSource控件随即连接到数据库并执行DELETE命令。最后GridView控件再次绑定SqlDataSource控件,获取并展示当前的产品(因为执行了删除命令,刚被删除的那个产品也就显示不出来了)。

  注意:因为GridView控件是将它的DataKeys值传给SqlDataSource控件的参数,所以尤为重要的是将GridView的DataKeyNames属性设置为主键列,而且SqlDataSource控件的SelectCommand要返回这些列。具体到本例,最好将SqlDataSource控件的DeleteCommand里的参数设置为@ProductsID。如果DataKeyNames 属性没有设置,或参数名不是@ProductsID,点击删除按钮时也会发生postback事件,但不会成功地删除记录。

图5形象地显示了该原理。

/uploads/allimg/c161121/14OI93Q2M10-3Y052.gif
图5:点击GridView控件的删除按钮将会调用SqlDataSource的Delete()方法

第2步:自动的创建INSERT、UPDATE和DELETE语句

  就像在第1步中提到的那样,INSERT、UPDATE和DELETE SQL语句可以在属性窗口设置,也可以通过控件声明来构造。然而这样需要我们手写代码,单调且容易出错。幸运的是,我们可以通过数据源设置向导来自动的生产INSERT、UPDATE和 DELETE语句。方法是使用它的“指定来自表或视图的列”模式。

  打开InsertUpdateDelete.aspx页面,在设计模式里添加一个DetailsView控件,设置其ID为ManageProducts,接下来,在其智能标签里选择“创建新数据源”,创建一个名为ManageProductsDataSource的SqlDataSource,如下图:

/uploads/allimg/c161121/14OI93Q5E20-395921.gif
图6:创建一个名为ManageProductsDataSource的SqlDataSource控件

  选择数据库时,在下拉列表中选择NORTHWINDConnectionString连接字符串,点下一步,在“设置选择命令”界面里,选中“指定来自表或视图的列”,在下拉列表中选择表Products,选中表的ProductID、ProductName、UnitPrice和 Discontinued列。

/uploads/allimg/c161121/14OI93QN960-40a49.gif
图7:返回表Products的ProductID、ProductName,、UnitPrice和Discontinued

  为了自动创建基于选定表和选定列的INSERT、UPDATE和DELETE命令,点击“高级”按钮,选中“生成INSERT、UPDATE和DELETE命令”选项。

/uploads/allimg/c161121/14OI93R09450-4153Z.gif
图8:选中“生成INSERT、UPDATE和DELETE命令”选项

  当查询返回的那些列包含主键列(有时几个列都是主键列)时,才能启用“生成INSERT、UPDATE和DELETE命令”选项。当选择了“生成INSERT、UPDATE和DELETE命令”选项后,才能选择“使用开放式并发”选项。当选择该选项后,就将在UPDATE和DELETE命令里增加WHERE字句,以提供开放式并发控制。现在先不忙选择“使用开放式并发”选项,我们将在后面的教程里讨论如何使SqlDataSource控件实现开放式并发。

  当选择“生成INSERT、UPDATE和DELETE命令”选项后,点“OK”回到“设置选择命令”界面,再点下一步,点完成。完成向导后,Visual Studio将会为DetailsView控件增加ProductID, ProductName和UnitPrice三个绑定列(BoundFields),和一个Discontinued单选框列(CheckBoxField )。在DetailsView控件的智能标签里选择分页项,并清空DetailsView的宽、高属性。

  我们注意到智能标签里还包括插入、编辑、删除选项可用,这是因为SqlDataSource控件的InsertCommand, UpdateCommand和DeleteCommand属性同样被赋值了。就像如下代码所示:

<asp:DetailsView ID="ManageProducts" runat="server" AllowPaging="True"
AutoGenerateRows="False" DataKeyNames="ProductID"
DataSourceID="ManageProductsDataSource" EnableViewState="False">
<Fields>
 <asp:BoundField DataField="ProductID" HeaderText="ProductID"
  InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
 <asp:BoundField DataField="ProductName" HeaderText="ProductName"
  SortExpression="ProductName" />
 <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
  SortExpression="UnitPrice" />
 <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
  SortExpression="Discontinued" />
</Fields>
</asp:DetailsView>

<asp:SqlDataSource ID="ManageProductsDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
DeleteCommand=
 "DELETE FROM [Products] WHERE [ProductID] = @ProductID"
InsertCommand=
 "INSERT INTO [Products] ([ProductName], [UnitPrice], [Discontinued])
  VALUES (@ProductName, @UnitPrice, @Discontinued)"
SelectCommand=
 "SELECT [ProductID], [ProductName], [UnitPrice], [Discontinued]
  FROM [Products]"
UpdateCommand=
 "UPDATE [Products] SET [ProductName] = @ProductName,
  [UnitPrice] = @UnitPrice, [Discontinued] = @Discontinued
  WHERE [ProductID] = @ProductID">
<DeleteParameters>
 <asp:Parameter Name="ProductID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
 <asp:Parameter Name="ProductName" Type="String" />
 <asp:Parameter Name="UnitPrice" Type="Decimal" />
 <asp:Parameter Name="Discontinued" Type="Boolean" />
 <asp:Parameter Name="ProductID" Type="Int32" />
</UpdateParameters>
<InsertParameters>
 <asp:Parameter Name="ProductName" Type="String" />
 <asp:Parameter Name="UnitPrice" Type="Decimal" />
 <asp:Parameter Name="Discontinued" Type="Boolean" />
</InsertParameters>
</asp:SqlDataSource>

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读