command.Parameters.IsDirty的正值表示什么?

时间:2013-07-30 16:16:41

标签: sql-server vb.net ado.net

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

2 个答案:

答案 0 :(得分:1)

打开阅读器时,输出参数对于调用代码不可见。

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

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

newCountValue = CInt(command.Parameters("@count").Value)

答案 1 :(得分:0)

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

我确实发现what appears to be a decompiled version of the SqlParameterCollection class似乎有一个名为internal的{​​{1}}成员,但您无权访问此内容。

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

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