GridView控件更新时找不到id
Posted
技术标签:
【中文标题】GridView控件更新时找不到id【英文标题】:GridView control fail to find the id when update 【发布时间】:2018-06-24 03:13:57 【问题描述】:我正在编写以下代码来更新 SQL Server。我收到以下错误消息:
“-”附近的语法不正确。必须声明标量变量“@id”。 说明:执行过程中发生未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。
异常详细信息:System.Data.SqlClient.SqlException:不正确 '-' 附近的语法。必须声明标量变量“@id”。
来源错误:
在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈跟踪:
[SqlException (0x80131904): '-' 附近的语法不正确。必须申报 标量变量“@id”。]
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="id" DataSourceID="SqlDataSource2" ForeColor="#333333" GridLines="None" AllowSorting="True">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:TemplateField HeaderText="id" InsertVisible="False" SortExpression="id">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="E-mail" HeaderText="E-mail" SortExpression="E-mail" />
</Columns>
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#507CD1" ForeColor="White" Font-Bold="True" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle ForeColor="White" HorizontalAlign="Center" BackColor="#2461BF" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:demoConnectionString4 %>"
SelectCommand="SELECT * FROM [de]"
UpdateCommand="UPDATE [de] SET [Name]=@Name, [E-mail]=@column1 WHERE [id]=@id">
<UpdateParameters>
<asp:Parameter Name="id" Type="Int32" />
<asp:Parameter Name="Name" Type="String"/>
<asp:Parameter Name="column1" Type="String"/>
</UpdateParameters>
</asp:SqlDataSource>
【问题讨论】:
对 id 也使用 datafeild,而不是执行硬编码的命令,尝试在更新按钮事件的 onclick 上处理它 可能是字段名“E-mail”。在您的 SQL 版本中,字段名称中是否允许使用连字符“-”? 【参考方案1】:错误出现在 ID TemplateField 上,您在 EditItemTemplate
上使用 Label
来显示 ID,并且此标签 未回发 sql 更新所需的 ID。 asp:label
未呈现此处需要的输入字段。
要么删除 TemplateField,然后将 asp:BoundField
用作其余字段,它会在您更新每一行时自动创建输入字段,要么将其设置为 read only text box
(在 EditImteTemplate
上),因此可以发布 ID。
这几行是你需要关注和改变的:
<asp:TemplateField HeaderText="id" InsertVisible="False" SortExpression="id">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
【讨论】:
以上是关于GridView控件更新时找不到id的主要内容,如果未能解决你的问题,请参考以下文章
向导控件中的 Gridview 自定义分页在 asp.net 中无法正常工作
asp.net的GridView控件的onrowdeleting属性怎么出错显示为找不到可接受类型。。。呢