C# 存储过程上的企业库缓存参数?

C# 存储过程上的企业库缓存参数?,c#,stored-procedures,data-access-layer,enterprise-library,C#,Stored Procedures,Data Access Layer,Enterprise Library,我正试图与我的同事们一起标准化一些数据访问代码。前面提到的同事之一断言,EntLib数据访问块试图缓存存储的proc调用的参数 我已经看过reflector,有证据表明它可能正在缓存它们。但我不认为在下面的情况下是这样的 public Dictionary<long, string> GetQueue(int maxItems) { var sq = new SqlDatabase(_connString.ConnectionString);

我正试图与我的同事们一起标准化一些数据访问代码。前面提到的同事之一断言,EntLib数据访问块试图缓存存储的proc调用的参数

我已经看过reflector,有证据表明它可能正在缓存它们。但我不认为在下面的情况下是这样的

    public Dictionary<long, string> GetQueue(int maxItems)
    {
        var sq = new SqlDatabase(_connString.ConnectionString);

        var result = new Dictionary<long, string>();

        using (var cmd = (SqlCommand)sq.GetStoredProcCommand("dbo.GetQueue"))
        {
            sq.AddInParameter(cmd, "maxItems", DbType.Int32, maxItems);

            var reader =  cmd.ExecuteReader(CommandBehavior.CloseConnection);

            while (reader.Read())
            {
                long id = reader.GetInt64(reader.GetOrdinal("id"));
                string fileName = reader.GetString(reader.GetOrdinal("meta_data_filename"));

                result.Add(id, fileName);
            }
        }

        return result;
    }
公共字典GetQueue(int-maxItems)
{
var sq=新的SqlDatabase(_connString.ConnectionString);
var result=newdictionary();
使用(var cmd=(SqlCommand)sq.GetStoredProcCommand(“dbo.GetQueue”))
{
sq.AddInParameter(cmd,“maxItems”,DbType.Int32,maxItems);
var reader=cmd.ExecuteReader(CommandBehavior.CloseConnection);
while(reader.Read())
{
long id=reader.GetInt64(reader.GetOrdinal(“id”);
字符串文件名=reader.GetString(reader.GetOrdinal(“元数据文件名”);
添加(id,文件名);
}
}
返回结果;
}
有人能证实或否认这一点吗


我使用的是EntLib 4.1,我将代码撕下并放入我的库中

它使用
sp_help
并解析输出以确定数据类型

这些天来,我把代码删掉了,.Net在添加参数方面做得好多了

cmd.Parameters.AddWithValue("@name",somevalue)
在你不断反射器的例子中。。。您将发现它是通过以下路径完成的:GetStoredProcCommand()

您将获得一个已经填充了参数的命令对象

ent lib代码受版权保护,但代码几乎与此相同


据我所知,它不会缓存参数。使用数据库对象的同一实例,我在运行跟踪时多次调用DiscoverParameters。每次调用DiscoverParameters时,我都会看到一个[sys].[sp_procedure_params_100_managed],所以它看起来每次都在往返

下面是一个如何自己做的例子,看起来可能没问题:


顺便说一句,不需要使用反射器来查看,EntLib附带了所有源代码。您可以安装源代码并直接进入。:)说得好,谢谢!我会检查一下。企业库是在下发布的,因此代码可以根据许可证限制(这似乎很合理)使用/复制/修改/分发。它被存档在archive.org:不幸的是,存档链接也被破坏了。随后,它在回路机器站点上显示一条错误消息(此URL已从回路机器中排除)。