2010-12-16 12 views
8

Leute,Parametrisierter SqlCommand - Vorteil der Spezifizierung von SqlDbType?

Sofern ich mich nicht irre, kann eine parametrisierte SQL-Abfrage durch Angabe von SqlDbType für jeden Parameter generiert werden oder nicht. Es scheint, dass ich einen SqlParameter konstruieren kann, indem ich nur den Parameternamen und den Wert des Parameters zur Verfügung stelle. Was ist der Vorteil für die Angabe von SqlDbType?

Antwort

6

Der Vorteil ist: Sie haben klare Kontrolle darüber, was SqlDbType der Parameter sein wird.

Andernfalls muss ADO.NET eine Schätzung vornehmen, basierend auf dem Wert, den Sie z. in der .AddWithValue Methode. Diese Vermutungen sind ziemlich gut die meiste Zeit - aber wenn Sie z.B. Stellen Sie eine DBNull.Value, es ist ein bisschen schwierig, eine wirklich gut durchdachte Schätzung zu machen ...

Auch wenn Sie eine Zeichenfolge angeben, ist es oft vorteilhaft, in der Lage sein, die max. Länge dieses String-Parameters (die x in der VARCHAR(x) Definition in Ihrem gespeicherten proc). Wenn Sie dies nicht tun, wird ADO.NET die aktuelle Länge verwenden, und das kann manchmal gut oder schlecht sein.

Also insgesamt: es gibt Ihnen nur mehr Kontrolle und es ist deutlicher/klarer, was Ihre Absichten sind.

+0

danke! macht Sinn! – SFun28

0

Der Hauptvorteil ist die Leistung. Wenn Sie den Parametertyp nicht angeben, wird die SqlClient-Engine dies aus dem Parameterwert ableiten. Wenn Sie den Parametertyp zur Entwurfszeit kennen, können Sie mit der Angabe des Parametertyps die Kosten des Inferenzschritts auf einfache Weise vermeiden.

+0

Nicole - ist der Perfusionsverlust signifikant? – SFun28

2

Wenn Sie SqlDbType angeben, stellen Sie sicher, dass der für den Parameter angegebene Wert anhand des bereitgestellten SqlDbType überprüft wird. Wenn die Daten nicht passen, erhalten Sie früher einen Fehler (andernfalls erhalten Sie eine Ausnahme von SQL Server).

1

Ich stimme zu, dass Sie mit einem bestimmten SqlDbType mehr Kontrolle erhalten. Ein weiterer Grund, warum Sie beim Umgang mit Text mehr Kontrolle wünschen, ist der Umgang mit Unicode-Text. Zum Beispiel mit SqlDbType.NVarChar Vs SqlDbType.VarChar.

+0

toller Punkt! Ich verwende keinen Unicode-Text, aber wenn ich das täte, wäre das ein Problem. – SFun28