2013-07-30 17 views
1

我想在使用SqlCommand参数的输出参数中获得一些值。command.Parameters.IsDirty的正值是什么意思?

存储过程运行正常,提供正确的记录。我验证了它在Sql Server上执行的过程,以及确保我做对了。

不过,我无法在服务器端获得输出,它总是没有任何东西!在调试时,我看到IsDirty proeprty for command.Parameters设置为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

请出示你的代码。你如何在你的sql命令中声明你的输出参数? –

+0

也请显示存储过程的SQL代码。 –

+0

改为尝试'ParameterDirection.InputOutput'。 – GSerg

回答

1

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

关闭所有与ExecuteReader打开阅读器,然后阅读你的价值:

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

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

Muchos gracias !!!!!!那是罪魁祸首。感谢分享专业知识! – dhruvpatel

0

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

我确实找到what appears to be a decompiled version of the SqlParameterCollection class似乎有internal成员IsDirty,但你不应该有权访问此。

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

它可能有助于发布更多的代码,包括从哪里获取SqlCommand类。