c# - 从 C# 中的 vs 中的存储过程获取返回值
问题描述
我有一个数据库上下文文件,我在 SQL 中的 SSMS 中创建了一个过程:-
alter procedure gross_Sal(@empID int,@annual_sal int output)
as
begin
SELECT @annual_sal=SAL*12from EMP WHERE EMPNO=@empID
end
declare @ans int;
exec gross_Sal 1111, @annual_sal=@ans output;
select @ans as 'gross salary';
这在 SQL 中工作正常,但我不知道如何在 c# 中调用它
我已经写了代码:-
private static void paramProc()
{
var ctx = new trainingContext();
var param = new SqlParameter[] {
new SqlParameter()
{
ParameterName="@empno",
SqlDbType=System.Data.SqlDbType.Int,
Size =100,
Direction=System.Data.ParameterDirection.Input,
Value = 1111
},
new SqlParameter()
{
ParameterName="@annual_sal",
SqlDbType=System.Data.SqlDbType.Int,
Size =100,
Direction=System.Data.ParameterDirection.Output,
}
};
var ans = ctx.Emps.FromSqlRaw("@ans int");
var result = ctx.Emps.FromSqlRaw("gross_Sal @empno, @annual_sal = @ans output", param[0],param[1]);
Console.WriteLine("gross sal of the emp "+ans);
}}
我的 c# 代码中可能有一个重大错误,但请帮助我。
我得到这个作为输出: -
gross sal of the emp Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[HW_SQL.Models.Emp]
编辑1:-我试过这个:-
var result = ctx.Emps.FromSqlRaw($"EXEC gross_Sal @empID, @annual_sal OUTPUT", param[0], param[1]).AsEnumerable().FirstOrDefault();
Console.WriteLine("gross salary="+param[1].Value);
它将捕获块并显示错误。
error
解决方案
这解决了问题:-
ctx.Database.ExecuteSqlRaw("gross_Sal @empID, @annual_sal OUTPUT", param);
Console.WriteLine("gross sal of the emp "+param[1].Value);
我正在使用 FromSqlRaw,我必须使用 EXEC 使其像这样工作:-
var result = ctx.Emps.FromSqlRaw($"EXEC gross_Sal @empID, @annual_sal OUTPUT", param[0], param[1]).AsEnumerable().FirstOrDefault();
Console.WriteLine("gross salary="+param[1].Value);
但这引发了一个没有消息的错误。但是,使用
ctx.Database.ExecuteSqlRaw("gross_Sal @empID, @annual_sal OUTPUT", param);
你可以直接执行它。
我希望它可以帮助面临同样问题的人。
推荐阅读
- swift - 有没有办法删除 Fastlane 截图中的 Push Notification Pop Up 确认消息?
- css - 3 x 3 单元格,大中心布局,带有 flexbox 需要简单的实现思路
- javascript - 需要帮助来改进带有封面和艺术家项目的音频播放器
- java - 如何从序列中停用消息处理器?
- go - 在导入包时遇到此错误知道如何解决此问题吗?
- android - 如何使用 rxAndroid 递归调用 api 直到满足某些条件?
- java - 用 Java 声明的库的 API 在哪里?
- javascript - if 语句条件中的 if 语句条件
- google-app-maker - 通过查询生成器过滤表 - 空值不全选
- ios - 轻量级 iOS 性能分析