#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. Спасибо вам за всю вашу помощь, кстати. Я попробовал код, и он говорит, что все еще используется неправильный синтаксис. Я перепробовал все, что мог придумать, до сих пор, но безрезультатно.