public DataTable GetRandomQuestionByCateId(string id, int z)
{
string sql = "SELECT * FROM tblQuestions where CategoryId=@a ORDER BY QId OFFSET @z ROWS FETCH NEXT 1 ROWS ONLY";
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter("@a",id),
new SqlParameter("@z",z),
};
return DAO.GetTable(sql, param);
}
我有这段代码,想要执行存储过程:
CREATE PROCEDURE GetRandomQuest
(@a int,
@b int)
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM tblQuestions
WHERE CategoryId = @a
ORDER BY QId
OFFSET @b ROWS
FETCH NEXT 1 ROWS ONLY;
END
EXEC dbo.GetRandomQuest `@a=2`, `@b=1`
如何在上述情况下更换它?
答案 0 :(得分:1)
实际上这个问题发生在DAO.GetTable()
方法内部,但问题中没有提供,没问题,你可以修改GetRandomQuestionByCateId
的签名来执行存储过程而不是sqlquery。更改将如下所示:
public DataTable GetRandomQuestionByCateId(string id, int z)
{
DataTable resultData;
String sqlProcedure = "GetRandomQuest";
using (SqlConnection cn = new SqlConnection("Your connection string here"))
{
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@a", SqlDbType.VarChar, 50).Value = a;
cmd.Parameters.Add("@z", SqlDbType.int).Value = z;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(resultData);
}
}
return resultData;
}
需要注意的要点是,使用cmd.CommandType = CommandType.StoredProcedure;
指定要执行存储过程,在这种情况下,commandText将是过程的名称,您可以像命令一样向命令添加参数你现在在做什么。
答案 1 :(得分:0)
使用此代码:
public DataTable GetRandomQuestionByCateId(string id, int z)
{
var conn = new SqlConnection(connectionString);
var cmd = new SqlCommand("GetRandomQuest", conn) ;
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@a", SqlDbType.VarChar).Value = id;
cmd.Parameters.Add("@b", SqlDbType.VarChar).Value = z;
conn.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
}
答案 2 :(得分:0)
public DataTable GetRandomQuestion(int id, int z)
{
ArrayList sqlParameterArrayList = new ArrayList();
SqlParameter sqpID = new SqlParameter("a", SqlDbType.Int);
sqpID.Value = id;
sqlParameterArrayList.Add(sqpID);
SqlParameter sqpZ = new SqlParameter("b", SqlDbType.Int);
sqpZ.Value = z;
sqlParameterArrayList.Add(sqpZ);
return DAO.GetTable("GetRandomQuest", sqlParameterArrayList);
}
我将id的数据类型更改为int,因为这是您在存储过程中所期望的。只需根据需要进行更改。希望这会有所帮助。