【问题标题】:Database.ExecuteSqlCommand always returns -1Database.ExecuteSqlCommand 总是返回 -1
【发布时间】:2014-01-21 13:37:35
【问题描述】:

我有一个 EF 代码优先模型。它工作正常,但是当我尝试使用Database.ExecuteSqlCommand 运行存储过程时,它总是返回-1,不管我在存储过程中放入什么结果总是-1

我的存储过程:

CREATE PROCEDURE [dbo].[Login_user] 
    @clientKey varchar(max)
AS
BEGIN
    SET NOCOUNT ON
    RETURN(0)
END

我运行它是这样的:

return Database.ExecuteSqlCommand(EXEC [dbo].[Login_user] {0}", key);

我错过了什么吗?

顺便说一句,如果我从 SQL Server Management Studio 运行存储过程,它会返回 0

USE [lo9iMed]
GO
DECLARE @return_value int
EXEC    @return_value = [dbo].[Login_user]
    @clientKey = N'76F41F99-EA9E-4181-A6FB-579D23D3C2C0'

SELECT  'Return Value' = @return_value

提前致谢。

阿尼巴尔

【问题讨论】:

标签: c# sql sql-server entity-framework stored-procedures


【解决方案1】:

您的存储过程中包含 SET NOCOUNT ON 指令(您可能使用了 SSMS 模板?)。这意味着它不会计算受您的命令影响的行数。删除这条线,你应该很高兴! :)

【讨论】:

    【解决方案2】:

    因为您使用的是SELECT,所以您想要的是ExecuteScalar - 或者如果没有公开,则为SqlQuery<int>。如果您将其更改为 return @return_value;,您可能会得到您想要的结果 - 但是:您可能不会。

    【讨论】:

    • 嗨 Marc thx,4 你的答案。我试过 ExecuteQuery("EXEC [dbo].[Login_user] {0}", key) 并且它抛出 The data reader has more than one field。多个字段对 EDM 基元或枚举类型无效。
    • @user2968933 坦率地说,不管这个 Database 包装器在这里:它对你没有帮助......
    猜你喜欢
    • 2016-11-21
    • 2019-10-10
    • 2014-04-13
    • 2017-03-20
    • 2013-11-04
    • 2011-12-09
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多