3

同僚とデータ アクセス コードを標準化しようとしています。前述の同僚の 1 人は、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を使用しています

4

2 に答える 2

3

それは間違いなく、コードを切り取って自分のライブラリに入れました。

出力を使用sp_helpおよび解析して、データ型を決定しました。

最近、私はコードを切り取りました。.Net はパラメーターの追加に関してはるかに優れています。

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

あなたの例では、リフレクターを続けています...このパスの下で行われていることがわかります GetStoredProcCommand()

すでにパラメーターが入力された Command オブジェクトが返されます

ent lib コードは著作権で保護されていますが、コードはこれとほぼ同じです

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

于 2009-04-22T13:50:17.163 に答える
2

私が知る限り、パラメーターはキャッシュされません。トレースの実行中に、データベース オブジェクトの同じインスタンスを使用して、DiscoverParameters を複数回呼び出しました。DiscoverParameters を呼び出すたびに [sys].[sp_procedure_params_100_managed] が表示されるため、毎回往復しているように見えます。

自分でそれを行う方法の例を次に示します。これは問題ないようです。

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

于 2009-08-21T15:13:30.387 に答える