Parametrisierter SqlCommand - Vorteil der Spezifikation von SqlDbType?

8

Leute,

Wenn ich mich nicht irre, kann eine parametrisierte SQL-Abfrage generiert werden, indem SqlDbType für jeden Parameter angegeben wird 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?

    
SFun28 16.12.2010, 16:24
quelle

4 Antworten

6

Der Vorteil ist: Sie haben eine 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 Methode .AddWithValue . 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 Vermutung zu machen ...

Wenn Sie eine Zeichenfolge angeben, ist es oft von Vorteil, die max. Länge dieses Zeichenfolgenparameters (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 könnte manchmal gut oder schlecht sein.

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

    
marc_s 16.12.2010, 16:41
quelle
2

Wenn Sie SqlDbType angeben, stellen Sie sicher, dass der Wert, den Sie für den Parameter angeben, gegen den bereitgestellten SqlDbType validiert wird. Wenn die Daten nicht passen, erhalten Sie früher einen Fehler (andernfalls würden Sie eine Ausnahme von SQL Server erhalten) / p>     

Rockcoder 16.12.2010 16:43
quelle
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.

    
dretzlaff17 16.12.2010 18:16
quelle
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 für den Inferenzschritt vermeiden.

    
Nicole Calinoiu 16.12.2010 16:40
quelle