【问题标题】:The server tag is not well formed. QueryString and DataBinding服务器标签的格式不正确。查询字符串和数据绑定
【发布时间】:2014-08-17 17:53:54
【问题描述】:

我进行了大量研究,但没有找到解决此问题的方法。

<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]

有什么帮助吗?

【问题讨论】:

  • 我现在改了。谢谢:)

标签: asp.net sql vb.net data-binding connection-string


【解决方案1】:

Request.QueryString("CaseID") 周围的引号绝对是一个问题。您已经为 SelectCommand 元素使用了双引号。将SelectCommand 周围的引号改为单引号:

SelectCommand='Select * from tblCase where CaseID=<%=Request.QueryString["CaseID"] %>'

看到 * 有效后,请随意将 * 改回字段列表。

【讨论】:

  • 修复后会出现同样的错误。对此有何建议?
  • 我会改用这个:SelectCommand='Select * from tblCase where CaseID=&lt;%=Request.QueryString["CaseID"] %&gt;'。看到它有效后,请随意将* 更改回字段列表。
  • 没有它确实可以工作,但是当用户单击链接时,我正在尝试使用查询字符串从表中打开特定记录。
  • @user3779804 更新了包含查询字符串参数的命令。
  • 感谢您的所有帮助,顺便说一句。我尝试了代码,它说仍然存在不正确的语法。到目前为止,我已经尝试了所有我能想到的方法,但无济于事。
【解决方案2】:

更改 SelectCommand 以使用参数:Using Parameters with the SqlDataSource Control,这将具有消除 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)。

【讨论】:

  • 我比我更喜欢这种方法。
  • 稍作调整,这个解决方案就奏效了!非常感谢大家!
  • @user3779804 如果它基本上解决了您的问题,请随意将我的答案标记为已接受的答案。它可能会帮助该线程的未来读者了解是什么解决了它,并可能鼓励他们使用 SQL 参数,这几乎总是组合 SQL 查询的更好方法。
猜你喜欢
  • 2013-12-26
  • 1970-01-01
  • 2010-10-15
  • 2012-12-14
  • 1970-01-01
  • 2013-07-16
相关资源
最近更新 更多