SQL Server存储过程输出参数并从select返回数据

时间:2018-01-25 14:54:37

标签: sql-server stored-procedures output entity-framework-core

我在SQL Server 2012中有一个存储过程:

CREATE PROCEDURE GetImmediateManager   
   @managerID INT OUTPUT  
AS  
BEGIN  
   SET @managerID = 6;

   SELECT * 
   FROM Roles;
END  

当我删除select * from Roles;时,输出值(@managerID)会正确返回到我的C#代码。但是当过程有select * ..时,output参数返回的值为null。

如何同时返回选择和输出?

在C#中我的代码如下:

dbContext.Database.OpenConnection();

DbCommand cmd = dbContext.Database.GetDbConnection().CreateCommand();
cmd.CommandTimeout = 15;
cmd.CommandText = "GetImmediateManager";
cmd.CommandType = System.Data.CommandType.StoredProcedure;

var rowsCountParam = new SqlParameter("@managerID", System.Data.SqlDbType.Int);
rowsCountParam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(rowsCountParam);

using (var reader = cmd.ExecuteReader())
{
    tasks = reader.MapToList<TaskManagerTask>();
    //rowsCount = (int)rowsCountParam.Value;
}

1 个答案:

答案 0 :(得分:0)

简单的回答是将@managerID添加到您的选择语句

对于一个不那么简单的可能是以下,我更改了名称以反映使用,在关闭后获取参数。

var managerIDParam = new SqlParameter("@managerID", System.Data.SqlDbType.Int);
managerIDParam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(managerIDParam);

using (var reader = cmd.ExecuteReader())
{
    tasks = reader.MapToList<TaskManagerTask>();
}
int managerIDParamUsed = (int)managerIDParam.Value;