我在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;
}
答案 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;