ASP.NET的GridView控件 - 带参数空格的UpdateQuery

时间:2012-06-06 23:11:19

标签: asp.net webforms

我有一个项目,我正在使用Visual Studio 2010和ASP.NET Web窗体。在其中,我有一个GridView控件,我绑定到MySQL表。它在控件中显示我的表没有问题,但是在我对控件启用编辑后,我发现当字段中有空格时,我在更新表中的字段时遇到了问题。

例如,我定义了以下表格:

CREATE TABLE `test_table` (
  `oid` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `first_column` varchar(20) NOT NULL,
  `second_column` varchar(20) NOT NULL,
  `third column` varchar(20) NOT NULL,
  PRIMARY KEY (`oid`)
)

注意其中一个字段的名称中有一个空格。这是我遇到问题的地方。在我的页面中,我有以下代码:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="oid" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:CommandField ShowEditButton="True" />
            <asp:BoundField DataField="oid" HeaderText="oid" ReadOnly="True" 
                SortExpression="oid" />
            <asp:BoundField DataField="first_column" HeaderText="first_column" 
                SortExpression="first_column" />
            <asp:BoundField DataField="second_column" HeaderText="second_column" 
                SortExpression="second_column" />
            <asp:BoundField DataField="third column" HeaderText="third column" 
                SortExpression="third column" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:testcon %>" 
        ProviderName="<%$ ConnectionStrings:testcon.ProviderName %>" 
        SelectCommand="select * from test_table" UpdateCommand="update `test_table` set
    `first_column`   = @first_column,
    `second_column`  = @second_column
where
    `oid` = @oid"></asp:SqlDataSource>

通过UpdateCommand,我可以很好地更新此表上的first_column和second_column。现在我希望它以同样的方式更新third column,但它不起作用。如果我将查询更改为:

update `test_table` set
    `first_column`   = @first_column,
    `second_column`  = @second_column,
    `third column`   = @third column
where
    `oid` = @oid

查询运行时会出现此错误:

Parameter '@third' must be defined.

我也试过@third \ column,@ {third column},@ [third column],{@ third column} - 显然这些都不起作用。因此,我的问题是:我为更新查询添加了什么才能更新我的MySQL字段?

2 个答案:

答案 0 :(得分:0)

您应该可以通过更新参数

使用任何参数名称

http://www.asp.net/web-forms/tutorials/data-access/accessing-the-database-directly-from-an-aspnet-page/inserting-updating-and-deleting-data-with-the-sqldatasource-vb

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:testcon %>" 
    ProviderName="<%$ ConnectionStrings:testcon.ProviderName %>" 
    SelectCommand="select * from test_table" UpdateCommand="update `test_table` set
`first_column`   = @first_column,
`second_column`  = @second_column
where `oid` = @oid">

   <UpdateParameters>
    <asp:Parameter Name="first_column" Type="String" />
    <asp:Parameter Name="second_column" Type="String" />
    <asp:Parameter Name="third_column" Type="String" />
   </UpdateParameters>
</asp:SqlDataSource>

答案 1 :(得分:0)

这种情况的解决方案是为填充Gridview的Select语句中的列提供别名。例如:

SELECT ..., [third column] AS third_column, ...
FROM ...

然后您可以使用@third_column作为参数名称。由于我预计您可能希望使用空格而不是下划线显示列标题,因此可以将此字段的HeaderText属性设置为您想要的属性。

使用这种方法,GridView的Update命令将轻松映射到相应的参数(因为它们具有相同的名称),您不必更改数据库中的定义。我还建议使用SQLServer Profiler查看服务器中执行的实际T-SQL代码。

祝你好运!