ho letto la documentazione MSDN e gli esempi here e so che la sintassi corretta per una chiamata Paramters.Add
è:Differenza tra Parameters.Add e Parameters.AddWithValue
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
Dove è necessario specificare il nome del parametro, la SqlDbType
E il valore con .Value
.
Ora la sintassi corretta per una chiamata Parameters.AddWithValue
è:
command.Parameters.AddWithValue("@demographics", demoXml);
linea singola e saltare la parte Type
.
mia domanda è: Come è possibile che quando lo faccio come questo,
command.Parameters.Add("@demographics", demoXml);
// .Add method with .AddWithValue syntax
non ottengo alcun errore di compilazione e ancora più strano, tutto sembra funzionare correttamente quando viene eseguito il codice?
L'unica cosa è che dovrete convivere con un nuovo avvertimento per ogni parametro si aggiunge in questo modo. – phadaphunk
Sì, l'avviso è perché ** questo sovraccarico è obsoleto ** come indicato nella documentazione. Dalla documentazione, inoltre, "Prestare attenzione quando si utilizza questo overload del metodo SqlParameterCollection.Add per specificare valori di valori integer." –
Nel caso in cui qualcuno che è curioso come me, si chieda perché lo zero possa implicitamente convertirsi in enum ma non in qualsiasi altro intero. Ecco un link a una spiegazione SO, http://stackoverflow.com/questions/14950750/why-switch-for-enum-accepts-implicit-conversion-to-0-but-no-for-any-other-intege –