2013-03-01 67 views
-1

我有一个问题,一直让我很沮丧,我用google和google搜索,找不到我想要的东西。存储过程返回唯一标识符

我有这样的SQL Server存储过程,它的伟大工程,并返回唯一的标识符:

ALTER PROCEDURE [dbo].[mcd_AddLogin] 
    @UserName   nvarchar(256), 
    @Password   nvarchar(256), 
    @UID    uniqueidentifier OUTPUT 
AS 
BEGIN 
    IF(@UID IS NULL) 
     SELECT @UID = NEWID() 
    ELSE 
    BEGIN 
     IF(EXISTS(SELECT [USERNAME] FROM dbo.LoginPassing_Active)) 
      RETURN -1 
    END 

Declare @Active bit 
Declare @Exp_Date datetime 
Set @Active = 1 
Set @Exp_Date = DATEADD(mi, 1, GETDATE()) 

INSERT dbo.LoginPassing ([USERNAME], [PASSWORD], [ACTIVE], [EXP_DATE], [UID]) 
VALUES (@UserName, @Password, @Active, @Exp_Date, @Uid) 

RETURN 0 
END 

我想在和ASP.NET应用程序中使用这一点,并正在以下错误:

Procedure or function 'mcd_AddLogin' expects parameter '@UID', which was not supplied.

下面是我的ASP.Net应用程序的代码,任何人都可以帮我解决了什么错误,我敢肯定,它很简单,我刚才错过了一招:

Dim conSQL As New SqlConnection 
    conSQL.ConnectionString = My.Settings.conSQL 
    conSQL.Open() 

    Dim comSQL As New SqlCommand 

    comSQL.Connection = conSQL 
    comSQL.CommandText = "mcd_AddLogin" 
    comSQL.CommandType = CommandType.StoredProcedure 
    comSQL.Parameters.Add("@Username", SqlDbType.NVarChar).Value = "username" 
    comSQL.Parameters.Add("@Password", SqlDbType.NVarChar).Value = "password" 

    comSQL.ExecuteNonQuery() 
    litAD.Text = comSQL.Parameters("@UID").Value 

请提前感谢您的帮助。

感谢, 史蒂夫

+1

在你的代码中,在下一行添加参数之前,它看起来像是在执行存储过程comSQL.ExecuteNonQuery()。 – 2013-03-01 16:31:42

+0

不,这是您如何获得输出值...这不是添加参数,而是读取它。谢谢史蒂夫。 – Steve 2013-03-01 16:40:24

+0

这是真的,但你必须在执行前添加它 - 记下相应地设置它的方向属性。目前你遇到的问题是输出参数甚至不在参数集合 – 2017-01-13 16:43:58

回答

0

原来我google搜索错误的事情 - 我想输出参数,我解决了这个问题,我下面的代码:

comSQL.Connection = conSQL 
    comSQL.CommandText = "mcd_AddLogin" 
    comSQL.CommandType = CommandType.StoredProcedure 
    comSQL.Parameters.Add("@Username", SqlDbType.NVarChar).Value = "spearce" 
    comSQL.Parameters.Add("@Password", SqlDbType.NVarChar).Value = "kintikai" 
    comSQL.Parameters.Add("@UID", SqlDbType.UniqueIdentifier) 
    comSQL.Parameters("@UID").Direction = ParameterDirection.Output 
    comSQL.ExecuteNonQuery() 
    litAD.Text = comSQL.Parameters("@UID").Value 

感谢您的帮助反正。

0

您需要spacefiy的Parameter Direction和之前调用它传递ExecuteNonQuery()

myParm.Direction = ParameterDirection.Output 

请阅读更多关于Input and Output Parameters

6

存储过程你有 输出参数,那么你必须提供该参数,并且在SP执行后你可以从参数中获得输出值。

试试这个:

comSQL.Parameters.Add("@Password", SqlDbType.NVarChar).Value = "password" 
comSQL.Parameters.Add("@UID", SqlDbType.Int) 
comSQL.Parameters("@UID").Direction = ParameterDirection.Output 
comSQL.ExecuteNonQuery() 
litAD.Text = comSQL.Parameters("@UID").Value 
+0

我刚刚使用下面的问题来解决自己的问题,和你的一样。感谢您如此快速。 – Steve 2013-03-01 16:37:05