2014-01-14 9 views
20

Wann sollte ich Parameters. Add/AddWithValue verwenden? Im folgenden MSDN Beispiel verwenden sie Parameters.Add für int und Parameters.AddWithValue für stringSqlCommand Parameter Add vs. AddWithValue

command.Parameters.Add("@ID", SqlDbType.Int); 
command.Parameters["@ID"].Value = customerID; 

command.Parameters.AddWithValue("@demographics", demoXml); 

Was das Beste für datetime

+1

[cmd.Parameters.Add] ist jetzt veraltet. Verwenden Sie stattdessen 'cmd.Parameters.AddWithValue'] (http://stackoverflow.com/a/29554589/3936696) –

Antwort

28

Verwenden Add, wenn Sie alle explizit mit ein wenig mehr Arbeit machen wollen, zu verwenden ist. Verwenden Sie AddWithValue, wenn Sie faul sind. AddWithValue leitet den Typ des Parameters von seinem Wert ab, also stellen Sie sicher, dass es der richtige Typ ist. Sie sollten zum Beispiel eine string zu int analysieren, wenn das der richtige Typ ist.

Es gibt einen Grund Add zu vermeiden, wenn Ihr Parametertyp ist int Sie mit dem overload that takes the parameter-name and an object seitdem another overload is chosen with the SqlDbType-enum vorsichtig sein muss.

Von remarks:

Seien Sie vorsichtig, wenn Sie diese Überlastung der ganzzahligen Parameterwert angeben SqlParameterCollection.Add Methode verwenden. Da diese Überladung einen Wert vom Typ Objekt annimmt, müssen Sie den Integralwert in einen Objekttyp konvertieren, wenn der Wert Null ist, wie das Beispiel nach C# zeigt.

parameters.Add("@pname", Convert.ToInt32(0)); 

Wenn Sie diese Umwandlung nicht durchführen, die Compiler geht davon aus, dass Sie die SqlParameterCollection.Add (string, SqlDbType) Überlastung zu nennen versuchen.

+0

[' cmd.Parameters.Add' ist jetzt veraltet. Verwenden Sie stattdessen 'cmd.Parameters.AddWithValue'] (http://stackoverflow.com/a/29554589/3936696) –

+4

@RahulNikate:' AddWithValue' ist auch nicht der beste Weg, da er den Parametertyp aus dem Parameterwert ableitet . Dies führt oft zu schlechten Ausführungsplänen oder falschen Konvertierungen. Es validiert auch nicht den Parameter an erster Stelle (zB type wenn 'Datetime', aber Sie übergeben eine' String'). Nur 'Add (String parameterName, Object value)' ist veraltet, alle anderen Überladungen von 'Add' nicht. Ich bevorzuge den, der den Parameternamen und den 'SqlDbType' (erwägt, die Größe anzugeben, wenn String-Typ). –

+1

'AddWithValue' vermeidet nur das in meiner Antwort erwähnte Problem und hat die gleiche Funktionalität wie' Add (string, object) '. –