它是VS2008中的ASP.net应用程序,连接到SQL 2005数据库。
调用存储过程没有错误,db update成功但OUTPUT参数一直返回DBnull。在vb代码下面:
Dim ConnectString As String = "", connect As New Data.SqlClient.SqlConnection
ConnectString = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
connect.ConnectionString = ConnectString
Dim cmd As New SqlCommand("saveAccess", connect)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter("@Name", "SampleName"))
Dim outparam As SqlParameter = New SqlParameter("@returnValue", SqlDbType.Int)
outparam.Direction = ParameterDirection.Output
cmd.Parameters.Add(outparam)
connect.Open()
cmd.ExecuteNonQuery()
If IsDBNull(cmd.Parameters("@returnValue").Value Then
Response.Write("Why does it always returns DBNull")
Else : Response.Write(cmd.Parameters("@returnValue").Value.ToString())
End If
connect.Close()
这是SQL代码
ALTER PROCEDURE [dbo].[saveAccess]
(@Name NVARCHAR(20), @returnValue INT OUTPUT )
AS
BEGIN
INSERT INTO Access ([Name]) VALUES (@Name);
SELECT @returnValue = @@ROWCOUNT;
END
不确定我在做什么是愚蠢的错误。任何输入都有帮助。
由于
答案 0 :(得分:1)
而不是SELECT
,请尝试使用SET
设置输出参数的值
SET @returnValue = @@ROWCOUNT;
答案 1 :(得分:1)
解决方案(就像我自己说的那样愚蠢):错过了returnValue变量前面的@符号。我正确地输入了这个帖子中的代码,但我没有在SP中使用@。
wrong: SELECT returnValue = @@ROWCOUNT;
correct: SELECT @returnValue = @@ROWCOUNT;
由于