3

私はこれを持っていました

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'.

だから私はここで何が間違っているのですか?

4

3 に答える 3

12

試す:

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

(SQL Server 2005 以降)

于 2011-04-07T18:56:57.923 に答える
0

このリンクで定義されているように、@QuestionsPerCats を () に含めます

SELECT TOP (@QuestionsPerCats) * 
From Questions 
WHERE CategoriesID = @CategoriesID ORDER BY NEWID()
于 2011-04-07T18:58:46.177 に答える
0

これを次のように変更してみてください。

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


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

コマンドにパラメーターを追加するために使用している方法は、少し奇妙です。これがあなたのエラーの原因であると思われます。

于 2011-04-07T18:59:18.383 に答える