添加Insert、Update和Delete语句
Adding Insert,Update,and Delete Statements
当前情况下,在所创建的SqlDataSource控件中仅包括一个Select语句,该语句用于从数据库中获取数据:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
SelectCommand="SELECT * FROM [Customers]"
ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>">
</asp:SqlDataSource>
然而,使用数据源控件向导来创建剩下的Create、Retrieve、Update和Delete(CRUD)语句,会使工作变得更加简单。为了实现这一点,可切换到“Design”视图,单击SqlDataSource控件的智能标签,并选择“Configure Data Source…”,此时,将弹出“Configure Data Source”向导。该向导显示当前的连接字符串,单击“Next”,将显示“Configure Select Statement”对话框,单击“Advanced”按钮。
这时候,将弹出“Advanced SQL Generation Options”对话框。可单击“Generate Insert,Update and Delete statements”(生成Insert、Update和Delete语句)多选框,如图9-10所示。

图9-10:添加CRUD方法
单击这个多选框将使向导创建剩下的CRUD方法,同时,这会启用第二个多选框:Use optimistic concurrency。此处,先不选中它。单击“OK”按钮和“Next”按钮,然后是“Finish”按钮。程序会要求更新GridView。不幸的是,这样会毁掉前面所有的设置,然而,好消息是现在已经将GridView控件绑定到了一个提供所有的四种CRUD方法的数据源控件上。
打开智能标签,设置所需外观,选中“Enable Editing”和“Enable Deleting”项。
如示例9-2所示,列举了所生成的SqlDataSource控件的HTML代码。
示例 9-2:包括CRUD方法的SqlDataSource源代码
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
SelectCommand="SELECT * FROM [Customers]"
ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
DeleteCommand="DELETE FROM [Customers]
WHERE [CustomerID] = @original_CustomerID"
InsertCommand="INSERT INTO [Customers] ([CustomerID], [CompanyName],
[ContactName], [ContactTitle], [Address], [City], [Region],
[PostalCode], [Country], [Phone], [Fax])
VALUES (@CustomerID, @CompanyName, @ContactName, @ContactTitle, @Address,
@City, @Region, @PostalCode, @Country, @Phone, @Fax)"
UpdateCommand="UPDATE [Customers] SET [CompanyName] = @CompanyName,
[ContactName] = @ContactName, [ContactTitle] = @ContactTitle,
[Address] = @Address, [City] = @City, [Region] = @Region,
[PostalCode] = @PostalCode, [Country] = @Country,
[Phone] = @Phone, [Fax] = @Fax
WHERE [CustomerID] = @original_CustomerID">
<DeleteParameters>
<asp:Parameter Type="String" Name="original_CustomerID" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Type="String" Name="CompanyName" />
<asp:Parameter Type="String" Name="ContactName" />
<asp:Parameter Type="String" Name="ContactTitle" />
<asp:Parameter Type="String" Name="Address" />
<asp:Parameter Type="String" Name="City" />
<asp:Parameter Type="String" Name="Region" />
<asp:Parameter Type="String" Name="PostalCode" />
<asp:Parameter Type="String" Name="Country" />
<asp:Parameter Type="String" Name="Phone" />
<asp:Parameter Type="String" Name="Fax" />
<asp:Parameter Type="String" Name="original_CustomerID" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Type="String" Name="CustomerID" />
<asp:Parameter Type="String" Name="CompanyName" />
<asp:Parameter Type="String" Name="ContactName" />
<asp:Parameter Type="String" Name="ContactTitle" />
<asp:Parameter Type="String" Name="Address" />
<asp:Parameter Type="String" Name="City" />
<asp:Parameter Type="String" Name="Region" />
<asp:Parameter Type="String" Name="PostalCode" />
<asp:Parameter Type="String" Name="Country" />
<asp:Parameter Type="String" Name="Phone" />
<asp:Parameter Type="String" Name="Fax" />
</InsertParameters>
</asp:SqlDataSource>
在以上代码中包括了SqlDataSource控件的声明(以及底部的关闭标签)。在ID和必须的runat="server"之后,包括4个属性:SelectCommand(之前已经有了)和新的DeleteCommand、InsertCommand和UpdateCommand。
SelectCommand="SELECT * FROM [Customers]"
DeleteCommand="DELETE FROM [Customers]
WHERE [CustomerID] = @original_CustomerID"
InsertCommand="INSERT INTO [Customers] ([CustomerID], [CompanyName], [ContactName],
[ContactTitle], [Address], [City], [Region], [PostalCode], [Country], [Phone], [Fax])
VALUES (@CustomerID, @CompanyName, @ContactName, @ContactTitle, @Address, @City, @Region,
@PostalCode, @Country, @Phone, @Fax)"
UpdateCommand="UPDATE [Customers] SET [CompanyName] = @CompanyName,
[ContactName] = @ContactName, [ContactTitle] = @ContactTitle, [Address] = @Address,
[City] = @City, [Region] = @Region, [PostalCode] = @PostalCode, [Country] = @Country,
[Phone] = @Phone, [Fax] = @Fax
WHERE [CustomerID] = @original_CustomerID">
DeleteCommand只有一个参数(@original_CustomerID),DeleteParameters具体设置如下:
<DeleteParameters>
<asp:Parameter Type="String" Name="original_CustomerID" />
</DeleteParameters>
UpdateCommand需要更多参数,一个参数用于指定每个需要更新的列,还有一个参数用于指定原CustomerID(用来确保更新正确的记录)。类似地,InsertCommand也要为新记录的每个列设置参数。所有这些参数都在SqlDataSource中定义。







