2015-01-29 3 views
1

У меня проблема с сильным типизированным запросом набора данных в моем проекте.Сильный типизированный набор данных, значение переменной TOP Значение

У меня есть запрос, как это:

SELECT * FROM dbo.PositionData WHERE [email protected]_Tracker 

который работает отлично и DataTable функция корректно генерируется.

Теперь я хотел бы добавить значение TOP для запроса, которое может быть переменной. Это может выглядеть так, но это не работает:

SELECT TOP @TopValue * FROM dbo.PositionData WHERE [email protected]_Tracker 

Есть еще один способ, чтобы выполнить эту задачу?

Я как-то пробовал это с частичным классом моего адаптера таблицы, но я не знаю, как получить доступ к правильной команде (я вижу свою пользовательскую команду в CommandCollection, но я не знаю, как я могу оценить правую команду, чтобы заменить что-то в CommandText).

Возможно ли это с использованием сильного типизированного набора данных?

Любая помощь будет отличной. спасибо.

С наилучшими пожеланиями, Сильвана

ответ

0

Вы можете поместить его в скобках:

SELECT TOP (@TopValue) * FROM dbo.PositionData WHERE [email protected]_Tracker 

Это действует правильно и генерирует int параметра для таблицы-адаптер SqlCommand.


Согласно вашему комментарию, если его можно параметризовать сортировки направления в ORDER BY в строго типизированном DataSet. Да, это возможно:

SELECT TOP @TopValue * FROM dbo.PositionData WHERE [email protected]_Tracker 
ORDER BY 
    CASE WHEN @OrderDirection = 'ASC' THEN [Time] END ASC, 
    CASE WHEN @OrderDirection = 'DESC' THEN [Time] END DESC 

Но вы должны добавить параметр командной коллекции вручную, так как Visual Studio не хочет. Поэтому

  • правой кнопкой мыши по команде и
  • нажмите properties
  • нажмите parameters (в нижней части экрана)

добавить параметр @OrderDirection как здесь:

add parameter screenshot

Но, возможно, вам следует использовать два разных метода или хранимую процедуру.

+0

Отлично работает. Вы знаете, есть ли что-то подобное для следующего запроса: SELECT TOP (@TopValue) * FROM dbo.PositionData WHERE ID_Tracker = @ ID_Tracker ** ORDER BY [Time] (@OrderDirection) ** Я бы хотел сказать там, если заказ должен быть ASC или DESC. Это возможно? Еще раз спасибо. – gogcam

+0

@ user1631441: Я отредактировал свой ответ. –

Смежные вопросы