AddWithValue ohne DBType, wodurch Abfragen langsam ausgeführt werden

Ich habe cmd.Parameters.AddWithValue verwendet und keinen DBType (int, varchar, ...) angegeben, um Abfragen auszuführen. Nach dem Blick auf SQL Profiler scheinen Abfragen, die mit dieser Methode ausgeführt werden, sehr viel langsamer zu sein als bei Angabe des Datentyps.

Um Ihnen eine Vorstellung davon zu geben, wie viel langsamer es ist, hier ein Beispiel. Die Abfrage ist eine einfache Suche in einer einzelnen Tabelle und die Spalte in der where-Anweisung ist indiziert. Bei der Angabe des Datentyps wird eine bestimmte Abfrage in etwa 0 MS ausgeführt (zu klein, um von SQL Server gemessen zu werden) und erfordert 41 Lesevorgänge. Wenn ich den DBType entferne, kann es ungefähr 200 ms dauern und 10000 Lesevorgänge, bis die Abfrage abgeschlossen ist.

Ich bin mir nicht sicher, ob es sich nur um eine fehlerhafte SQL Profiler-Berichterstattung handelt oder ob diese Werte tatsächlich korrekt sind, aber sie sind reproduzierbar, da ich den DBType hinzufügen und entfernen kann und die in SQL Profiler angegebenen Werte erzeugt.

Hat jemand anderes auf dieses Problem gestoßen und eine einfache Möglichkeit, es zu beheben. Mir ist klar, dass ich den Datentyp in meinem gesamten Code hinzufügen könnte, aber das scheint eine Menge Dinge zu sein, die hinzugefügt werden müssen, und wenn es einen einfacheren Weg gibt, das zu beheben, wäre das sehr dankbar.

[BEARBEITEN

Nach einigen ersten Tests (beide Szenarien werden in einer Schleife ausgeführt) scheinen die vom Profiler angegebenen Werte korrekt zu sein.

Nur als zusätzliche Information führe ich .Net 2.0 unter Windows XP Pro und SQL Server 2000 unter Windows 2000 für die DB aus.

[AKTUALISIEREN

Nach einigem Stöbern konnte ich dies findenBlogeintra, das verwandt sein kann. Scheint, dass Zeichenfolgenwerte in .Net (da sie Unicode sind) automatisch als nvarchar-Parameter erstellt werden. Ich muss bis Montag warten, bis ich zur Arbeit komme, um zu sehen, ob ich etwas tun kann, um das Problem zu beheben. Trotzdem scheint es, als müsste ich den Datentyp einstellen, was ich vermeiden wollte.

Dieses Problem tritt nicht bei jeder Abfrage auf, die ich durchgeführt habe, sondern nur bei einigen wenigen. Daher kann es sein, dass ich in den Abfragen mit Problemen nur den DBType einstelle, aber ich suche nach einer allgemeineren Lösung für das Problem.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage