将值传递给ObjectParameter变量

4

我创建了一个带有一些参数的存储过程。这些是我的存储过程参数:

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

我的function.cs文件:

public SaveInvitation_Result SaveInvitation(int userID,string email)
{
        SaveInvitation_Result result = null;

        var results = this.DataContext.SaveInvitation(null,userID,email,null);

        if (results != null)
        {
            result = results.FirstOrDefault();
        }

        return result;
    }

我正在以这种方式向我的函数SaveInvitation传递一些参数:

我的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);
}

当我执行这个函数/过程时,我会得到一个异常。
引用块: 参数数组中索引为0的参数为空。
我该如何传递值给invitationID和invitationGUID?

在调用SaveInvitation之前,您是否初始化了这些参数? - JleruOHeP
@JleruOHeP 谢谢您的回复。我无法初始化它。我该如何初始化?当我调用SaveInvitation时,我传递了null值。 - Ajay
使用此链接:http://msdn.microsoft.com/library/bb301079.aspx,例如 ObjectParameter invitationID = new ObjectParameter("InvitationID", typeof(int)); - JleruOHeP
我该如何在我的Funcation.cs中使用这个? - Ajay
请查看以下链接:http://stackoverflow.com/questions/517956/is-it-possible-to-use-output-parameters-with-executequeryt我认为...你可以使用'ref'。 - ayhtut
显示剩余3条评论
1个回答

9
userIDemailnull时,您必须将参数的值设置为DBNull.Value
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));
        userIDParameter.Value = DBNull.Value;
    }

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

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

我已经把值传递给了电子邮件和用户ID。 - Ajay
请注意,我添加了以下代码行:userIDParameter.Value = DBNull.Value;emailParameter.Value = DBNull.Value;。这些代码是必要的,以将参数的值设置为数据库中表示“NULL”的值。否则,该参数将处于未初始化状态。 - jam40jeff
谢谢。这个可行。只是一个注释,代替 typeof(global::System.Int32),typeof(int) 也可以。 - AKS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接