Parámetros de SqlCommand Agregar contra AddWithValue

¿Cuándo debería usar los Parameters. Add/AddWithValue Parameters. Add/AddWithValue ? En el siguiente ejemplo de MSDN, usan Parameters.Add para int y Parameters.AddWithValue para string

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

¿Cuál es el mejor para usar para datetime

Use Add si desea hacer todo explícito con un poco más de trabajo. Use AddWithValue si es flojo. AddWithValue derivará el tipo del parámetro de su valor, así que asegúrese de que sea del tipo correcto. Debería, por ejemplo, analizar una string a int si ese es el tipo correcto.

Hay una razón para evitar Add , si su tipo de parámetro es int debe tener cuidado con la sobrecarga que toma el nombre del parámetro y un objeto, ya que entonces se elige otra sobrecarga con el SqlDbType -enum .

De observaciones :

Tenga cuidado cuando utilice esta sobrecarga del método SqlParameterCollection.Add para especificar valores de parámetros enteros. Debido a que esta sobrecarga toma un valor de tipo Objeto, debe convertir el valor integral a un Tipo de objeto cuando el valor es cero, como lo demuestra el siguiente ejemplo de C #.

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

Si no realiza esta conversión, el comstackdor supone que está intentando llamar a la sobrecarga SqlParameterCollection.Add (cadena, SqlDbType).