服务器标记格式不正确。 QueryString和DataBinding。

3

我已经做了大量的研究,但没有找到解决这个问题的方法。

<form id="form1" runat="server">
<div>

    <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" EnableModelValidation="True">
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="(SELECT [TID], [CaseID]
  ,[dtTimeStamp]
  ,[Site]
  ,[Dept]
  ,[LocationDetail]
  ,[ContactPerson]
  ,[Phone]
  ,[contactEmail]
  ,[ProblemDesc]
FROM [hispcsupport_kb].[dbo].[tblCase] 
WHERE CaseID=" Request.QueryString("CaseID"))">

    </asp:SqlDataSource>

</div>
</form>

根据错误信息,这是导致错误的代码行。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="(SELECT [TID], [CaseID]

有需要帮忙吗?

我已经修改了。谢谢 :) - user3779804
2个回答

2
将SelectCommand更改为使用参数:在SqlDataSource控件中使用参数,这将有助于消除SQL注入攻击的可能性。该文末的“社区补充”部分显示了如何添加具有值的参数。所以...
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
    SelectCommand="(SELECT [TID], [CaseID]
      ,[dtTimeStamp]
      ,[Site]
      ,[Dept]
      ,[LocationDetail]
      ,[ContactPerson]
      ,[Phone]
      ,[contactEmail]
      ,[ProblemDesc]
    FROM [hispcsupport_kb].[dbo].[tblCase] 
    WHERE CaseID = @CaseID">
</asp:SqlDataSource>

并且在代码后台的适当位置:

SqlDataSource1.SelectParameters.Add("@CaseID", DbType.NVarChar, Request.QueryString("CaseID")) 

如果需要,请更改 DbType。


我喜欢这种方法比我的更多。 - Lynn Crumbling
稍加调整,这个解决方案就可以工作了!非常感谢大家! - user3779804
@user3779804 如果我的回答基本解决了您的问题,请随意将其标记为已接受的答案。这可能有助于未来阅读此线程的读者看到是什么解决了问题,并鼓励他们使用SQL参数,这几乎总是组合SQL查询的更好方法。 - Andrew Morton

1
“Request.QueryString("CaseID")”周围的引号肯定是个问题。您已经在“SelectCommand”元素中使用了双引号。将“SelectCommand”周围的引号改为单引号即可:
SelectCommand='Select * from tblCase where CaseID=<%=Request.QueryString["CaseID"] %>'

在确认它有效后,随意将 * 更改回字段列表。


修复后,仍然出现相同的错误。从这个点上有什么建议吗? - user3779804
我会使用以下代码替代:SelectCommand='Select * from tblCase where CaseID=<%=Request.QueryString["CaseID"] %>'。验证其可行后,你可以随意将 * 更改回字段列表。 - Lynn Crumbling
它没有那个也能工作,但我正在尝试使用查询字符串,在用户单击链接时打开表中的特定记录。 - user3779804
@user3779804 已更新命令,包括查询字符串参数。 - Lynn Crumbling
顺便说一句,非常感谢你的帮助。我尝试了代码,但它仍然显示语法错误。到目前为止,我已经尝试了我能想到的所有方法,但都没有成功。 - user3779804
没问题。你的第一个问题问得很好。你包含了所有必要的调试信息,相关代码、错误信息等。 - Lynn Crumbling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接