我有一个让我感到沮丧的问题,我用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
提前感谢您的帮助。
谢谢, 史蒂夫
答案 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
答案 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
感谢您的帮助。