0

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

例如,我定义了下表:

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 字段?

4

2 回答 2

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>
于 2012-06-07T00:36:55.407 回答
0

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

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

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

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

祝你好运!

于 2017-03-30T23:41:01.373 回答