我有一个项目,我正在使用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字段?
答案 0 :(得分:0)
您应该可以通过更新参数
使用任何参数名称<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代码。
祝你好运!