/ / Неправилен синтаксис за SELECT TOP с параметър - asp.net, sql, vb.net, sql-server-2005, sqlparameters

Неправилен синтаксис за SELECT TOP с параметър - asp.net, sql, vb.net, sql-server-2005, sqlparameters

Имал съм този

Dt = MyMod.GetDataTable("SELECT TOP " & QuestionsPerCats(i) & " * From Questions WHERE CategoriesID ="" & Cats(i) & "" 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".

И така, какво правя тук?

Отговори:

10 за отговор № 1

Опитвам:

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

(SQL Server 2005 и нагоре)


0 за отговор № 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)

Методът, който използвате, за да добавите параметри към командата, е малко странно. Подозирам, че това може да е причината за грешката ви.


0 за отговор № 3

Включете @QuestionsPerCats в (), както е определено в това връзка

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