Неправильный синтаксис для ВЫБОРА ВЕРШИНЫ с параметром

#asp.net #sql #vb.net #sql-server-2005 #sqlparameter

#asp.net #sql #vb.net #sql-server-2005 #sqlparameter

Вопрос:

Раньше у меня был этот

 Dt = MyMod.GetDataTable("SELECT TOP " amp; QuestionsPerCats(i) amp; " * From Questions WHERE CategoriesID ='" amp; Cats(i) amp; "' ORDER BY NEWID()")
  

но теперь я решил использовать sqlparameters, такие как

 Dim cmd As New SqlCommand("SELECT TOP @QuestionsPerCats * From Questions WHERE CategoriesID = @CategoriesID ORDER BY NEWID()", conn)
Dim sqlParam As SqlParameter = Nothing
sqlParam = cmd.Parameters.Add("@QuestionsPerCats", SqlDbType.SmallInt)
sqlParam.Value = QuestionsPerCats(i)
sqlParam = cmd.Parameters.Add("@CategoriesID", SqlDbType.SmallInt)
sqlParam.Value = Cats(i)
  

который, к сожалению, «отображает» как

 SELECT TOP @QuestionsPerCats * From Questions WHERE CategoriesID = @CategoriesID ORDER BY NEWID()
  

и возвращает следующую ошибку

 Incorrect syntax near '@QuestionsPerCats'.
  

Итак, что я здесь делаю не так?

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

1. Вы могли бы попробовать использовать cmd.Parameters. AddWithValue(имя, значение)

Ответ №1:

Попробуйте:

 SELECT TOP (@QuestionsPerCats) *
FROM Questions
WHERE CategoriesID = @CategoriesID
ORDER BY NEWID()
  

(SQL Server 2005 и выше)

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

1. Еще немного информации: SQL 2005 внес изменения в ключевое слово TOP, так что теперь это функция, которая может принимать параметр.

Ответ №2:

Попробуйте изменить его на это:

 cmd.Parameters.Add("@QuestionsPerCats", SqlDbType.SmallInt)
cmd.Parameters("@QuestionsPerCats").Value = QuestionsPerCats(i)


cmd.Parameters.Add("@CategoriesID", SqlDbType.SmallInt)
cmd.Parameters("@CategoriesID").Value = Cats(i)
  

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

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

1. @downvoter, является ли метод, который он использовал, нормальным в VB.NET ? Я специалист по C #, поэтому, пожалуйста, поправьте меня, если я ошибаюсь.

Ответ №3:

Включите @QuestionsPerCats в (), как определено в этой ссылке

 SELECT TOP (@QuestionsPerCats) * 
From Questions 
WHERE CategoriesID = @CategoriesID ORDER BY NEWID()
  

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

1. С более чем 800 повторениями вы, вероятно, уже должны были разобраться code tags , верно?