Тег сервера неправильно сформирован. Строка запроса и привязка данных

#asp.net #sql #vb.net #data-binding #connection-string

#asp.net #sql #vb.net #привязка данных #строка подключения

Вопрос:

Я провел массу исследований, но не смог найти способ решить эту проблему.

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

Любая помощь?

Комментарии:

1. Я изменил его сейчас. Спасибо 🙂

Ответ №1:

Измените команду 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, если требуется).

Комментарии:

1. Мне нравится этот подход больше, чем мой.

2. После небольшой настройки это решение сработало! Большое вам всем спасибо!

3. @user3779804 Не стесняйтесь отмечать мой ответ как принятый ответ, если он в основном решил вашу проблему. Это может помочь будущим читателям этой темы увидеть, что решило проблему, и может побудить их использовать параметры SQL, что почти всегда является лучшим способом составления запросов SQL.

Ответ №2:

Кавычки вокруг Request.QueryString("CaseID") — определенно одна из проблем. Вы уже используете двойные кавычки для SelectCommand элемента. Измените кавычки вокруг SelectCommand одинарных кавычек:

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

Не стесняйтесь изменять * обратно на список полей после того, как увидите, что это работает.

Комментарии:

1. При исправлении возникает та же ошибка. Есть какие-либо советы с этого момента?

2. Я бы использовал это вместо этого: SelectCommand='Select * from tblCase where CaseID=<%=Request.QueryString["CaseID"] %>' . Не стесняйтесь изменять * возврат к списку полей после того, как увидите, что это работает.

3. Он работает и без этого, но я пытаюсь использовать строку запроса для открытия определенной записи из таблицы, когда пользователь нажимает на ссылку.

4. @user3779804 обновил команду, включив параметр строки запроса.

5. Спасибо вам за всю вашу помощь, кстати. Я попробовал код, и он говорит, что все еще используется неправильный синтаксис. Я перепробовал все, что мог придумать, до сих пор, но безрезультатно.