我正在尝试使用SqlCommand参数获取输出参数的值。
存储过程运行正常,提供正确的记录。我在Sql Server上验证了它的执行程序,以确保我做得对。
尽管如此,我还无法在服务器端获得输出,它总是一无所获!在调试时,我看到command.Parameters的 IsDirty 属性设置为True。
任何人都能说出它的含义吗?
以下是一些代码:
command.Parameters.Add("@count", SqlDbType.Int).Value = initialCountValue
command.Parameters("@count").Direction = ParameterDirection.Output
Dim dr = command.ExecuteReader()
newCountValue = Convert.ToInt32(command.Parameters("@count").Value)
以下是程序示例:
CREATE PROCEDURE [dbo].[usp_some_procedure]
@filter INT
@count INT output
AS
BEGIN
DECLARE @filtered_ids TABLE(row_num INT IDENTITY(1,1), id INT primary key)
INSERT INTO @filtered_ids ( id )
SELECT id
FROM dbo.some_table
WHERE @filter = 0 OR table_field = @filter
ORDER BY id desc
SELECT @count = COUNT(*)
FROM @filtered_ids
SELECT some_table.*
FROM some_table
INNER JOIN @filtered_ids
ON some_table.id = @filtered_ids.id
END
答案 0 :(得分:1)
打开阅读器时,输出参数对于调用代码不可见。
关闭使用ExecuteReader
打开的阅读器,然后阅读您的值:
Using dr = command.ExecuteReader()
...
End Using
newCountValue = CInt(command.Parameters("@count").Value)
答案 1 :(得分:0)
SqlCommand.Parameters是SqlParameterCollection的一个实例。 SqlParameterCollection没有名为IsDirty的公开成员。如果您在command.Parameters
中看到一个,那么它不是SqlParameterCollection
的实例,这意味着command
不是SqlCommand
的实例。
我确实发现what appears to be a decompiled version of the SqlParameterCollection class似乎有一个名为internal
的{{1}}成员,但您无权访问此内容。
在我看来,你在这里做了一些奇怪的事情,这完全有可能是你问题的原因。我将添加默认的System.Data.SqlClient命名空间,看看是否能解决您的问题。
发布更多代码可能会有所帮助,包括从哪里获取SqlCommand类。