存储过程返回唯一标识符

时间:2013-03-01 16:28:20

标签: asp.net sql sql-server vb.net

我有一个让我感到沮丧的问题,我用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应用程序中使用它,并且收到以下错误:

  

过程或函数'mcd_AddLogin'需要参数'@UID',这是未提供的。

下面是我的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

提前感谢您的帮助。

谢谢, 史蒂夫

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您需要在调用Parameter Direction

之前填充ExecuteNonQuery()并传递它

例如

myParm.Direction = ParameterDirection.Output

请详细了解Input and Output Parameters

答案 2 :(得分:0)

原来我在谷歌搜索错误的东西 - 我想要OUTPUT参数,我用下面的代码解决了问题:

    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

感谢您的帮助。

相关问题