【问题标题】:Issue in reading stored procedure parameter value读取存储过程参数值的问题
【发布时间】:2012-12-26 22:42:29
【问题描述】:

执行时我无法从存储过程中读取值。

这是我的存储过程

ALTER Procedure [dbo].[SaveInvitation]
(
    @InvitationID INT OUTPUT,
    @UserID INT,
    @Email NCHAR(100),
    @InvitationGUID  UNIQUEIDENTIFIER OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;

BEGIN TRY
    IF @UserID = -1
        BEGIN
            SET @UserID = NULL
        END

    IF NOT EXISTS (SELECT 1 FROM Invitations WHERE LTRIM(RTRIM(Email)) = LTRIM(RTRIM(@Email)))
        BEGIN
            INSERT INTO Invitations (UserID,
                    Email,
                    CreateDate)
            VALUES (@UserID,
                    @Email,
                    GETDATE())

            -- GET NEWLY INSERTED INVITATIONS ID
            SET @InvitationID = IDENT_CURRENT('Invitations')

            -- GET GUID FROM INVITATION ID
            SELECT  @InvitationGUID = InvitationGUID
            FROM    Invitations
            WHERE   InvitationID = @InvitationID
        END
    ELSE
        BEGIN
            RAISERROR('ALREADY_INVITATED', 16, 127)
        END
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        BEGIN
            ROLLBACK
        END
    EXEC ThrowError
END CATCH
END

我正在从这个函数执行这个过程

我的DataBaseModel.Designer.cs

public ObjectResult<SaveInvitation_Result> SaveInvitation(ObjectParameter invitationID, Nullable<global::System.Int32> userID, global::System.String email, ObjectParameter invitationGUID)
    {
        ObjectParameter userIDParameter;
        if (userID.HasValue)
        {
            userIDParameter = new ObjectParameter("UserID", userID);
        }
        else
        {
            userIDParameter = new ObjectParameter("UserID", typeof(global::System.Int32));
        }

        ObjectParameter emailParameter;
        if (email != null)
        {
            emailParameter = new ObjectParameter("Email", email);
        }
        else
        {
            emailParameter = new ObjectParameter("Email", typeof(global::System.String));
        }

        return base.ExecuteFunction<SaveInvitation_Result>("SaveInvitation", invitationID, userIDParameter, emailParameter, invitationGUID);
    }

抛出异常

数据读取器与指定的“Te​​stModel.SaveInvitation_Result”不兼容。类型的成员“InvitationGUID”在数据读取器中没有同名的对应列。

我创建了一个复杂类型,即SaveUserRegistration_Result,并导入了一个返回类型为SaveUserRegistration_Result的函数SaveInvitation

如何解决上述异常?存储过程有什么变化吗?

截图

【问题讨论】:

    标签: c# wcf stored-procedures


    【解决方案1】:

    它给你这个错误是因为你实际上并没有SELECT返回结果。如果您将一行添加到您的程序的末尾,例如:

    SELECT  @InvitationGUID AS InvitationGUID
    

    它应该适合你。

    【讨论】:

    • 感谢您的回复。有必要这样奉献吗?我收到此错误参数数组中索引 0 处的参数为空。
    • 在 DataBaseModel.Designer.cs 我没有将任何值传递给invitationID,invitationGUID
    • 哦,我明白了,您将需要删除这些参数(它们当前是 OUTPUT 参数),然后如果您在 @987654325 中需要它们,您将希望将它们都返回 SELECT @。简而言之,不要使用OUTPUT 参数,而是发出SELECT 语句,该语句返回具有匹配列名称的行以匹配SaveInvitation_Result 中的属性名称。
    • 这是一个自动生成的函数,所以这个函数中的参数也是自动生成的。如果我手动删除并更新我的服务,那么参数会自动发挥作用。我添加了我的功能的屏幕截图。
    猜你喜欢
    • 2011-02-02
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多