-1

我有一个让我感到沮丧的问题,我用谷歌搜索和搜索,但找不到我想要的。

我有这个 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

提前感谢您的帮助。

谢谢,史蒂夫

4

3 回答 3

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
于 2013-03-01T16:34:40.020 回答
0

您需要 Parameter Direction在调用之前先进行空格键并通过它ExecuteNonQuery()

例如

myParm.Direction = ParameterDirection.Output

请阅读有关输入和输出参数的更多信息

于 2013-03-01T16:34:05.987 回答
0

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

    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

无论如何感谢您的帮助。

于 2013-03-01T16:38:43.747 回答