1

我正在尝试使用 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
4

2 回答 2

1

打开阅读器时,调用代码看不到输出参数。

关闭您打开的阅读器ExecuteReader,然后读取您的值:

Using dr = command.ExecuteReader()
   ...
End Using

newCountValue = CInt(command.Parameters("@count").Value)
于 2013-07-30T18:04:47.760 回答
0

SqlCommand.ParametersSqlParameterCollection的一个实例。SqlParameterCollection 没有名为 IsDirty 的公开可用成员。如果你在你的里面看到一个,command.Parameters那么它不是一个实例,SqlParameterCollection这意味着它command不是一个实例SqlCommand

我确实发现似乎是 SqlParameterCollection 类的反编译版本,它似乎有一个internal名为 的成员IsDirty,但您不应该访问它。

在我看来,您在这里做了一些奇怪的事情,这完全有可能是您的问题的原因。我会添加默认的 System.Data.SqlClient 命名空间,看看是否能解决您的问题。

发布更多代码可能会有所帮助,包括从哪里获取 SqlCommand 类。

于 2013-07-30T16:42:36.147 回答