3

Ich versuche, einen Datenzugriffscode mit meinen Kollegen zu standardisieren. Einer der zuvor genannten Kollegen behauptet, dass der EntLib-Datenzugriffsblock versucht, Parameter bei gespeicherten Proc-Aufrufen zu cachen.Enterprise-Bibliothek Caching-Parameter auf gespeicherten Procs?

Ich habe in Reflektor gesehen und es gibt einige Beweise, dass es sie caching sein könnte. Aber ich denke nicht es tut in der folgenden Situation.

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

Kann jemand bestätigen oder ablehnen?

Ich verwende EntLib 4.1

+1

By the way, gibt es keine Notwendigkeit, einen Reflektor zu verwenden, um zu sehen, kommt EntLib mit dem all Quellcode . Du kannst die Quelle installieren und direkt hineingehen. :) –

+0

Guter Punkt Danke! Ich werde das überprüfen. –

Antwort

3

Es definetly verwendet, riss ich den Code aus und warf in meiner Bibliothek in.

es verwendet sp_help und analysiert die Ausgabe, um die Datentypen zu bestimmen.

In diesen Tagen habe ich den Code rausgerissen, .Net ist viel besser über das Hinzufügen von Parametern.

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

in Ihrem Beispiel von Ihnen halten reflectoring ... finden Sie es auf diesem Weg getan GetStoredProcCommand()

Sie ein Command-Objekt zurück, bereits mit Parametern bevölkerten

Die ent lib Code ist urheberrechtlich geschützt, aber der Code ist fast identisch mit dieser

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

+0

Enterprise Library ist unter der [Microsoft Public License] (http://msdn.microsoft.com/en-us/library/ff649118.aspx) veröffentlicht, so dass der Code abhängig von den Lizenzbeschränkungen verwendet/kopiert/geändert/verteilt werden kann (die ziemlich vernünftig scheinen). –

2

Soweit ich kann tel l Es speichert die Parameter nicht zwischen. Mit der gleichen Instanz eines Datenbankobjekts habe ich DiscoverParameters mehrmals beim Ausführen einer Ablaufverfolgung aufgerufen. Jedes Mal, wenn ich DiscoverParameters anrufe, kann ich ein [sys]. [Sp_procedure_params_100_managed] sehen, also sieht es so aus, als würde es jedes Mal die Runde machen.

Hier ist ein Beispiel dafür, wie es selbst zu tun, das ist wie es scheint in Ordnung sein könnte:

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

+0

Link zum Artikel von 2006 funktioniert nicht mehr. – Firestrand

+0

Es ist archiviert bei archive.org: https://web.archive.org/web/20070210091538/http://davidhayden.com/blog/dave/archive/2006/11/03/CachingStoredProcedureParameters.aspx – hectorct

Verwandte Themen