【问题标题】:Enterprise library caching parameters on stored procs?存储过程中的企业库缓存参数?
【发布时间】:2010-10-16 19:54:17
【问题描述】:

我正在尝试与我的同事标准化一些数据访问代码。上述一位同事断言 EntLib 数据访问块试图缓存存储过程调用的参数。

我查看了反射器,有一些证据表明它可能正在缓存它们。但我不认为在以下情况下会这样做。

    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;
    }

谁能证实或否认这一点?

我正在使用 EntLib 4.1

【问题讨论】:

  • 对了,不用反光板看,EntLib自带了所有的源代码。您可以安装源代码并直接进入。:)
  • 好点谢谢!我会检查一下。

标签: c# stored-procedures data-access-layer enterprise-library


【解决方案1】:

我确实习惯了,我把代码撕下来扔进了我的图书馆。

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

这些天,我把代码撕掉了,.Net 在添加参数方面要好得多。

cmd.Parameters.AddWithValue("@name",somevalue)

在你的例子中,你一直在反思......你会发现它正在这条路径上完成 GetStoredProcCommand()

你会得到一个命令对象,已经填充了参数

ent lib代码有版权,但代码和这个几乎一模一样

http://code.google.com/p/dbdotnet/source/browse/trunk/ParameterCache.cs

【讨论】:

  • Enterprise Library 在Microsoft Public License 下发布,因此可以根据许可限制使用/复制/修改/分发代码(这似乎很合理)。
【解决方案2】:

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

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

http://davidhayden.com/blog/dave/archive/2006/11/03/CachingStoredProcedureParameters.aspx

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-05-11
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
相关资源
最近更新 更多