SQLClient输出参数返回DBNull

时间:2014-06-11 18:34:21

标签: asp.net sql-server output sqlclient sqlparameter

它是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

不确定我在做什么是愚蠢的错误。任何输入都有帮助。

由于

2 个答案:

答案 0 :(得分:1)

而不是SELECT,请尝试使用SET设置输出参数的值

SET @returnValue = @@ROWCOUNT;

答案 1 :(得分:1)

解决方案(就像我自己说的那样愚蠢):错过了returnValue变量前面的@符号。我正确地输入了这个帖子中的代码,但我没有在SP中使用@。

wrong: SELECT returnValue = @@ROWCOUNT;

correct: SELECT @returnValue = @@ROWCOUNT;

由于