/ / Niepoprawna składnia SELECT TOP z parametrem - asp.net, sql, vb.net, sql-server-2005, sqlparameters

Niepoprawna składnia SELECT TOP z parametrem - asp.net, sql, vb.net, sql-server-2005, sqlparameters

Kiedyś miałem ten

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

ale teraz postanowiłem użyć sqlparameters takich jak

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)

który niestety "renderuje" jak

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

i zwraca następujący błąd

Incorrect syntax near "@QuestionsPerCats".

Co ja tu robię źle?

Odpowiedzi:

10 dla odpowiedzi № 1

Próbować:

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

(SQL Server 2005 i nowsze)


0 dla odpowiedzi nr 2

Spróbuj zmienić to na:

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


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

Metoda, której używasz do dodawania parametrów do polecenia, jest trochę dziwna. Podejrzewam, że to może być przyczyną twojego błędu.


0 dla odpowiedzi № 3

Uwzględnij @QuestionsPerCats w (), zgodnie z definicją w to połączyć

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