读取存储过程参数值中的问题
问题描述:
执行它时,我无法从存储过程读取值。读取存储过程参数值中的问题
这里是我的存储过程
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);
}
它抛出一个异常
数据读取器与指定的'TestModel.SaveInvitation_Result'不兼容。类型为'InvitationGUID'的成员在数据阅读器中没有相应的列,名称相同。
我已经创建了一个复杂的类型,即和进口返回类型的一个功能SaveInvitation
。
我该如何解决上述异常?存储过程中是否有任何更改?
截屏
答
,因为你没有真正SELECT
掀背结果它给你这个错误。如果您添加了一行到你的程序结束例如:
SELECT @InvitationGUID AS InvitationGUID
这应该只是罚款你。
谢谢你的回复。是否需要这样做?我得到这个错误参数数组中索引为0的参数为空。 –
在DataBaseModel.Designer.cs中,我没有将任何值传递给invitationID,invitationGUID –
哦,我明白了,您需要删除这些参数(它们当前是'OUTPUT'参数),然后您将希望选择'SELECT'他们回来,如果你在'SaveInvitation_Result'中需要他们。简而言之,不要使用'OUTPUT'参数,而是发出'SELECT'语句,该语句返回一个匹配'SaveInvitation_Result'属性名称的列名称匹配的行。 –