Адаптер не может заполнить данные в наборе данных: возникло исключение - PullRequest
1 голос
/ 29 февраля 2012

У меня есть раскрывающийся список на моей веб-странице, выбранный элемент которого должен быть передан в запрос хранимой процедуры в базе данных. Тем не менее, я получаю странную ошибку здесь, в adp.Fill(ds) в моем методе связывания.

Исключение всегда говорит «Неверный синтаксис рядом с ключевым словом« to ».», Где to всегда является вторым словом в раскрывающемся списке. Например: элементы в выпадающем списке - 9 to 5 (2-е слово: до), age of empires (2-е слово: из)
Исключения:
Incorrect syntax near the keyword 'to'
Incorrect syntax near the keyword 'of' и т. Д.

Вот метод, который я использую:

private void Bind(string ss)
{
    SqlDataAdapter adp = new SqlDataAdapter("Retrieve", ConfigurationManager.ConnectionStrings["cn"].ConnectionString);
    DataSet ds = new DataSet();
    adp.SelectCommand.CommandType = CommandType.StoredProcedure;
    adp.SelectCommand.Parameters.Add("@s1", SqlDbType.NVarChar, 255).Value = ss;
    adp.SelectCommand.Parameters.Add("@s2", SqlDbType.NVarChar, 255).Value = DropDownList1.SelectedItem.ToString();
    adp.Fill(ds);
    DataList1.DataSource = ds;
    DataList1.DataBind();
}

StoredProcedure

ALTER PROCEDURE [dbo].[Retrieve_SegmentedQ]
(
    @s1 nvarchar(255),
    @s2 nvarchar(255)
)

AS
BEGIN
    DECLARE @query nvarchar(max)

    SET @query = 'SELECT DISTINCT Details from tbData WHERE Name IN (' + @s1 + ') AND UnsegmentedQuery=' + @s2

    exec sp_executesql @query
END

Есть предложения, что тут не так?

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Ошибка здесь:

SET @query = 'SELECT DISTINCT Details from tbData WHERE Name IN (' + @s1 + ') AND UnsegmentedQuery=' + @s2

Вы сохранили процедуру, но используете ее как запрос, поэтому делаете что-то вроде инъекции sql.В результате у вас будет следующий запрос:

SET @query = 'SELECT DISTINCT Details from tbData WHERE Name IN (5 to 9) AND UnsegmentedQuery=age of empires

, что неверно.сделайте это следующим образом, добавьте одинарные кавычки к вашим параметрам.

SET @query = 'SELECT DISTINCT Details from tbData WHERE Name IN (''' + @s1 + ''') AND UnsegmentedQuery=''' + @s2 + ''''
2 голосов
/ 29 февраля 2012

обновить процедуру, как показано ниже

ALTER PROCEDURE [dbo].[Retrieve_SegmentedQ]
(
@s1 nvarchar(255),
@s2 nvarchar(255)
)

AS
BEGIN
DECLARE @query nvarchar(max)

SET @query = 'SELECT DISTINCT Details from tbData WHERE Name IN (''' + @s1 + ''') AND UnsegmentedQuery=''' + @s2  + ''''

exec sp_executesql @query

END
0 голосов
/ 29 февраля 2012

Ваше текстовое имя команды должно совпадать с именем вашей процедуры .... и здесь они оба разные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...