2

1)

在使用 SqlDataReader 时,关联的 SqlConnection 正忙于为 SqlDataReader 提供服务,除了关闭 SqlConnection 之外,无法对 SqlConnection 执行其他操作。在调用 SqlDataReader 的 Close 方法之前就是这种情况。例如,在调用 Close 之前,您无法检索输出参数。

如果上述声明为真,那么为什么以下方法能够在阅读器关闭之前从输出参数中检索值:

    public int Something()
    {
        using (SqlConnection con = new SqlConnection(this.ConnectionString))
        {
            SqlCommand cmd = new SqlCommand("some_procedure", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@ID", SqlDbType.Int).Direction = ParameterDirection.Output;
            con.Open();
            cmd.ExecuteReader();
            return (int)cmd.Parameters["@ID"].Value;
        }
    }

2)

您可以重置 CommandText 属性并重新使用 SqlCommand 对象。但是,您必须先关闭 SqlDataReader,然后才能执行新的或上一个命令。

为什么必须在执行新命令之前关闭 sqldatareader?

谢谢

4

1 回答 1

3

在您的第一个问题中,您正在执行一个 NonQuery - 因此在您获得输出参数之前没有阅读器可以关闭。

对于第二个问题,你就是这样做的。该命令不会让您在另一个阅读器打开时呼叫另一个阅读器。

于 2010-04-13T19:38:01.220 回答