【问题标题】:stored procedure always returning -1 in entity framework存储过程在实体框架中总是返回 -1
【发布时间】:2016-05-31 07:06:38
【问题描述】:

在我的 sql 中,我有一个存储过程,它使用链接服务器从其他服务器查询数据。

下面是我的存储过程

   CREATE PROCEDURE [FIMS].[GetContactInfo]
   @ContactID nvarchar(MAX)
   AS
   BEGIN
   DECLARE @LinkServerName VARCHAR(25)
DECLARE @UserName VARCHAR(25)
DECLARE @Password VARCHAR(25)

SET @LinkServerName = 'myserverip'
SET @UserName = 'username'
SET @Password = 'password'

IF ((@LinkServerName IS NOT NULL) AND (@UserName IS NOT NULL) AND (@Password IS NOT NULL))
BEGIN 

IF NOT EXISTS (SELECT 1 FROM master.dbo.sysservers WHERE srvname = @LinkServerName)
    BEGIN
        exec sp_addlinkedserver @server=@LinkServerName;
        exec sp_addlinkedsrvlogin @rmtsrvname= @LinkServerName,@useself=false, @rmtuser=@UserName, @rmtpassword=@Password;
    END

    DECLARE
    @strSQL NVARCHAR(MAX)

SET @strSQL = 'SELECT 
                fcContact.Name as CompanyName, fcPhone.Area + fcPhone.Prefix + fcPhone.Trunk as ContactNumber
                FROM 
                '+ '[' + @LinkServerName + ']' + '.[MyDB].[AssContactPhone] fcAssContactPhone INNER JOIN
                '+ '[' + @LinkServerName + ']' + '.[MyDB].[Contact] fcContact ON fcAssContactPhone.ContactID = fcContact.ContactID INNER JOIN
                '+ '[' + @LinkServerName + ']' + '.[MyDB].[Phone] fcPhone ON fcAssContactPhone.PhoneID = fcPhone.PhoneID
                where fcContact.ContactID = '+ @ContactID +''
EXEC(@strSQL)   
END
END

我在我的实体框架中使用该存储过程,但它总是返回结果为'-1'

如何在我的实体框架中使用此存储过程返回的结果?

【问题讨论】:

  • 您正在将静态 'myserverip 分配给链接服务器名称参数。这是正确的吗?如果是,需要什么 NULL 检查
  • @bmsqldev 我所做的只是为了在这里显示存储过程。 Taht 在这里不是问题。
  • 好的。从链接服务器获取数据时。您应该遵循以下格式 [链接服务器名称].[数据库名称].[模式名称]。 [表名]。我认为您在动态查询中错过了架构名称/数据库名称
  • 能否将 WHERE 子句更改为 WHERE fcContact.ContactID = ''' + @ContactID + ''''; 并尝试
  • PRINT @strSQL 并在SSMS中执行return查询,可以得到线索。

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


【解决方案1】:

我必须假设它是使用 C# 命令调用的,因为问题是这样标记的,在这种情况下,您可能会发现返回 -1 的不是 SP,而是方法本身。没有看到代码,很难说出确切的原因,但这经常发生,因为调用 SQL 命令的方式。 -1 可以简单地表示 SQL 命令已正确执行。如果要在 C# 中返回结果,则需要使用 reader 命令而不是执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多