这是我的SQL Server存储过程:
ALTER PROCEDURE [dbo].[SearchUser]
(@Text NVARCHAR(100),
@TotalRows INT = 0 OUTPUT)
AS
BEGIN
SELECT @TotalRows=1000
SELECT * from Users
END
还有我的C#代码
using (var context = new TestDBEntities())
{
var outputParameter = new ObjectParameter("TotalRows", typeof(Int32));
context.SearchUser("", outputParameter);
Response.Write(outputParameter.Value);
}
但是
outputParameter.Value
始终为null。有人可以告诉我为什么吗?
最佳答案
在存储过程执行期间,输出参数由其实际值填充。
但是,表值存储过程实际上仅在尝试迭代结果记录集时才执行,而没有调用包装方法。
因此,这不起作用:
using (var context = new TestDBEntities())
{
var outputParameter = new ObjectParameter("TotalRows", typeof(Int32));
context.SearchUser("", outputParameter);
// Paremeter value is null, because the stored procedure haven't been executed
Response.Write(outputParameter.Value);
}
这样做:
using (var context = new TestDBEntities())
{
var outputParameter = new ObjectParameter("TotalRows", typeof(Int32));
// Procedure does not executes here, we just receive a reference to the output parameter
var results = context.SearchUser("", outputParameter);
// Forcing procedure execution
results.ToList();
// Parameter has it's actual value
Response.Write(outputParameter.Value);
}
当您使用存储过程而不返回任何记录集时,它们将在方法调用后立即执行,因此您在输出参数中具有实际值。
关于stored-procedures - 使用 Entity Framework 导入功能时无法获取输出参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5881359/