C# 从SQL存储过程c加载输出参数#

C# 从SQL存储过程c加载输出参数#,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我正在尝试从SQL存储过程加载输出参数 USE [EdiMon_Beta] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[GetClients] -- Add the parameters for the stored procedure here @sender nvarchar(max), @subSender nvarchar(max), @receiver nvarchar(ma

我正在尝试从SQL存储过程加载输出参数

USE [EdiMon_Beta]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[GetClients] 
-- Add the parameters for the stored procedure here
@sender nvarchar(max),
@subSender nvarchar(max),
@receiver nvarchar(max),
@subReceiver nvarchar(max),
@msgTypeID int,

@ErrorMsg nvarchar(max) = null OUTPUT,
@processId int = 0 OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

DECLARE
@senderId int,
@subSenderId int,
@receiverId int,
@subReceiverId int



SELECT
    @senderId = ID
FROM [dbo].[Party_Client]
WHERE
    [Number] LIKE @sender
IF(@senderId IS NULL)
BEGIN
    SET @ErrorMsg = 'Sender does not exist'
    RETURN ;
END


SELECT
    @subSenderId = ID
FROM [dbo].[Party_Client]
WHERE
    [Number] LIKE @subSender
    AND ParentId = @senderId
    AND IsSubClient = 1
IF(@subSenderId IS NULL)
BEGIN
    SET @ErrorMsg = 'SubSender does not exist'
    RETURN ;
END


SELECT
    @receiver = ID
FROM [dbo].[Party_Client]
WHERE
    [Number] LIKE @receiver
IF(@receiverId IS NULL)
BEGIN
    SET @ErrorMsg = 'Receiver does not exist'
    RETURN;
END


SELECT
    @subReceiverId = ID
FROM [dbo].[Party_Client]
WHERE
    [Number] LIKE @subReceiver
    AND ParentId = @receiverId
    AND IsSubClient = 1
IF(@subReceiverId IS NULL)
BEGIN
    SET @ErrorMsg = 'SubReceiver does not exist'
    RETURN ;
END


SELECT @processId = ID FROM [dbo].[Party_Processes]
WHERE MsgTypeId = @msgTypeID
AND SenderId = @senderId
AND ReceiverId = @receiverId

END
并用c代码阅读:

问题是,我的结果总是为空。这是biztalk中xsl映射的帮助器类。所有输入参数都直接来自映射。我想检查我们的数据库,这些客户端是否存在,以及使用它们的进程是否存在


谢谢你的帮助:)

好的,我解决了这个问题。问题出在两三个地方。首先,我的SQL存储过程中有一个错误,它不是通用的,所以我没有在这里发布它(它只适用于我的项目)。另一个错误是从存储过程转换输出:

processID = command.Parameters["@processId"].Value as int?;
errorMsg = command.Parameters["@ErrorMsg"].Value == DBNull.Value ? string.Empty : command.Parameters["@ErrorMsg"].Value.ToString();
其中processID声明为“int”,errorMsg声明为“string”


感谢所有的帮助。

过去,我还在EDMX中添加了存储过程,并调用entities.StoredProcess(arg1,arg2);其中arg2是ObjectParameterIt,不清楚什么是null。是ErrorMsg、processId还是两个参数都为空?它们都为空。我在c#类中做了一个小测试,结果显示我对这两个类都得到了null。你有空的try/catch吗?我只是没有把它复制到这里。有一些无用的代码行,它们后面是catch(Exception ex){ExceptionDispatchInfo.Capture(ex.InnerException.Throw();}
processID = command.Parameters["@processId"].Value as int?;
errorMsg = command.Parameters["@ErrorMsg"].Value == DBNull.Value ? string.Empty : command.Parameters["@ErrorMsg"].Value.ToString();