如何在Web API中调用带输出参数的SQL Server存储过程
获取存储过程输出参数的代码修改方案
要拿到存储过程的输出参数TransactionPassCorrectly(int类型),你得调整现有代码,改用参数化方式调用存储过程——这不仅能实现需求,还能避免SQL注入风险。具体修改如下:
修改后的完整代码
public async Task<ActionResult<int>> UpdateSuperHeroFromSP(int SuperHeroId, string Place) { // 定义输出参数,指定类型和输出方向 var outputParam = new SqlParameter("@TransactionPassCorrectly", SqlDbType.Int) { Direction = ParameterDirection.Output }; // 定义输入参数,替代字符串拼接 var idParam = new SqlParameter("@SuperHeroId", SuperHeroId); var placeParam = new SqlParameter("@Place", Place); // 调用存储过程,注意输出参数后要加OUT关键字 await context.Database.ExecuteSqlRawAsync( "EXEC UpdateSuperHero @SuperHeroId, @Place, @TransactionPassCorrectly OUT", idParam, placeParam, outputParam); // 从输出参数中提取结果并返回 var transactionResult = (int)outputParam.Value; return transactionResult; }
关键说明
- 参数化查询:不再直接拼接字符串,改用
SqlParameter传递参数,彻底避免SQL注入问题。 - 输出参数配置:必须给输出参数设置
Direction = ParameterDirection.Output,这样数据库才能将计算结果写入该参数。 - 存储过程调用语法:SQL Server中调用带输出参数的存储过程时,要在输出参数名后加上
OUT关键字(其他数据库语法可能略有不同)。 - 结果提取:执行完成后,通过
outputParam.Value获取返回值,记得做int类型转换。
内容的提问来源于stack exchange,提问作者Nenad
相关产品推荐
相关产品推荐

