【发布时间】:2014-03-30 20:29:06
【问题描述】:
使用 EF,我正在尝试执行一个返回单个字符串值的存储过程,即 SQL 代理作业的状态。
存储过程声明为
CREATE PROCEDURE [dbo].[up_GetJobStatus](@JobStatus NVARCHAR(30) OUTPUT)
AS
-- some code omitted for brevity
SELECT @JobStatus = (
SELECT
CASE job_state
WHEN 1 THEN 'Executing'
WHEN 2 THEN 'Waiting for thread'
WHEN 3 THEN 'Between retries'
WHEN 4 THEN 'Idle'
WHEN 5 THEN 'Suspended'
WHEN 6 THEN '<unknown>'
WHEN 7 THEN 'Performing completion actions'
END
FROM @xp_results results
INNER JOIN msdb.dbo.sysjobs sj
ON results.job_id = sj.job_id
WHERE sj.job_id = @job_id)
RETURN
我已验证存储过程工作正常,因为我可以在查询窗口中执行它并返回
@JobStatus
------------
1|Idle
但是使用 EF 执行时,参数值为 NULL
var param = new SqlParameter
{
ParameterName = "@JobStatus",
DbType = DbType.String,
Size = 30,
Direction = System.Data.ParameterDirection.Output
};
var result = this.etlContext.Database.SqlQuery<string>("EXEC dbo.up_GetJobStatus @JobStatus OUTPUT", param);
我也尝试过ExecuteSqlCommand 方法,但也没有用。
有什么想法吗?
【问题讨论】:
-
您是否尝试过使用: var result = this.etlContext.Database.SqlQuery
("EXEC dbo.up_GetJobStatus {0}", param.Value)?; -
试过了 - 没用
-
你有什么例外吗?还是只是返回 null?
-
您看过这个链接 (msdn.microsoft.com/en-us/library/vstudio/…) 以了解如何操作吗?您首先需要将存储过程导入到您的 dbmx
标签: c# sql entity-framework stored-procedures entity-framework-4