C# 用存储过程替换SQL查询
我有这个代码段,希望执行一个存储过程,如下所示:C# 用存储过程替换SQL查询,c#,.net,winforms,sql-server-2016,C#,.net,Winforms,Sql Server 2016,我有这个代码段,希望执行一个存储过程,如下所示: 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 SqlParamete
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`
我将id的数据类型更改为int,因为这是您在存储过程中所期望的。只需根据需要进行这些更改。希望这会有所帮助。实际上执行过程发生在
DAO.GetTable()
方法中,但问题中没有提供,没问题,您可以修改GetRandomQuestionByCateId
的签名以执行存储过程,而不是sqlquery。更改如下所示:
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);
}
使用
cmd.CommandType=CommandType.StoredProcess需要注意的要点代码>您指定要执行一个存储过程,在这种情况下,commandText将是该过程的名称,您可以像当前一样向命令添加参数。要替换什么?您的问题不够清楚,也令人困惑。I
想执行StoredProcess而不是sqlquery。@ParasMaharjan那么您想知道代码中要做哪些更改吗?是的,如果该帮助很容易通过谷歌搜索。
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);
}
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;
}