He leído la documentación y ejemplos de MSDN here y sé que la sintaxis correcta para una llamada Paramters.Add
es:Diferencia entre Parameters.Add y Parameters.AddWithValue
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
donde usted tiene que especificar el nombre del parámetro, el SqlDbType
Y el valor con .Value
.
Ahora la sintaxis correcta para una llamada Parameters.AddWithValue
es:
command.Parameters.AddWithValue("@demographics", demoXml);
sola línea y omitir la parte Type
.
Mi pregunta es: ¿Cómo es que cuando lo hago así,
command.Parameters.Add("@demographics", demoXml);
// .Add method with .AddWithValue syntax
no consigo ningún error de compilación y aún más raro, todo parece funcionar correctamente cuando se ejecuta el código?
La única cosa es que usted tiene que vivir con una nueva advertencia para cada parámetro se agrega esta manera. – phadaphunk
Sí, la advertencia es porque ** esta sobrecarga está obsoleta ** como se indica en la documentación. También de la documentación, "Tenga cuidado cuando use esta sobrecarga del método SqlParameterCollection.Add para especificar valores de parámetros enteros". –
En caso de que alguien que es curioso como yo, se pregunte por qué cero puede convertir implícitamente a una enumeración, pero no a ningún otro entero. Aquí hay un enlace a una explicación SO, http://stackoverflow.com/questions/14950750/why-switch-for-enum-accepts-implicit-conversion-to-0-but-no-for-any-other-intege –