非常简单的问题,但我在网上看到的所有答案都不适用。
我尝试在ASP.NET Gridview上进行更新,但是当我点击更新时,我收到此错误:
'nvarchar'附近的语法不正确。必须声明标量变量@intID。
这是我的数据源。我想这个问题来自这里,但我看不到...
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:connexionDev %>"
DeleteCommand="DELETE FROM [tbl_Bug] WHERE intID = @intID"
SelectCommand="SELECT [intID],[strTitre],[strDescription],[intStatus_FK],[intType_FK],[intSeriousness_FK] FROM [tbl_Bug]"
UpdateCommand="UPDATE [tbl_Bug] SET [strTitre] = @strTitre ,[strDescription] = @strDescription ,[intStatus_FK] = @intStatus_FK ,[intType_FK] = @intType_FK ,[intSeriousness_FK] = @intSeriousness_FK WHERE [intID] = @intID">
<DeleteParameters>
<asp:Parameter Name="intID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="intID" Type="Int32" />
<asp:Parameter Name="strTitre" Type="String" />
<asp:Parameter Name="strDescription" Type="String" />
<asp:Parameter Name="intStatus_FK" Type="Int32" />
<asp:Parameter Name="intType_FK" Type="Int32" />
<asp:Parameter Name="intSeriousness_FK" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
提前感谢您的帮助!
编辑 - 编辑 - 编辑
好吧,我想使用SQL事件探查器,但似乎它不在我的版本(SQL server 2008 Express)中,所以我尝试了另一个开源的sql探查器,但我从未理解它是如何工作的,它总是崩溃..
有没有其他方法可以了解所使用的查询,以便我可以跟踪我的问题?
答案 0 :(得分:4)
大家好,感谢您的帮助
我的查询很好,GridView
中的绑定很糟糕,非常简单的细节
这将有效:Text='<%# Bind("myValue") %>'
虽然这不会:Text='<%# Bind("[myValue]") %>'
所以要小心! :)现在一切正常!
再次感谢!
答案 1 :(得分:1)
在这种情况下,答案通常是运行SQL事件探查器并查看正在发送的SQL,它通常是变量名称不匹配,或者一旦看到发送到SQL Server的内容就同样简单。
答案 2 :(得分:0)
您可以为SqlDataSource.Updating
事件注册一个事件处理程序 - 它将在准备好命令时生成,并在执行之前引发。该命令将是DbCommand
对象,可以从事件处理程序将通过其SqlDataSourceCommandEventArgs
属性获取的Command
实例中检索该对象。转储所有命令参数的文本,实际名称和值(在DbCommand.Parameters
集合中),并检查错误。
答案 3 :(得分:0)
我认为您需要<SelectParameters>...</SelectParameters>
部分来声明所有字段。
答案 4 :(得分:0)
当字段/列名称中有空格时,通常会发生这种情况-重命名数据库列并删除空格-它将起作用。
如果您查看SQL Server监视器并检查生成的SQL代码以进行更新-由于列名中的空格,它会被弄乱。