Diferencia con Parameters.Add y Parameters.AddWithValue

Básicamente Commands tiene Parameters y parámetros tiene funciones como Add , AddWithValue , y etc. En todos los tutoriales que he visto, usualmente noté que están usando Add lugar de AddWithValue .

 .Parameters.Add("@ID", SqlDbType.Int) 

vs

 .Parameters.AddWithValue("@ID", 1) 

¿Hay alguna razón para NO usar AddWithValue ? Prefiero usar eso de nuevo

 Parameters.Add("@ID", SqlDbType.Int, 4).Value = 1 

ya que ahorra mi tiempo de encoding. Entonces, ¿cuál es mejor usar? ¿Cuál es seguro de usar? ¿Mejora el rendimiento?

Con el método Add() puede restringir la entrada del usuario especificando el tipo y la longitud de los datos, especialmente para columnas varchar .

 .Parameters.Add("@name",SqlDbType.VarChar,30).Value=varName; 

En el caso del método AddWithValue () (conversión implícita de valor), envía el valor nvarchar a la base de datos.

Creo que también hay algunos inconvenientes en el uso de AddWithValue que afectan el plan de excepción de caché de SQL, consulte la sección de longitud de parámetros aquí

Usaría AddWithValue para casos normales. Y use Add (name, dbtype … solo cuando el tipo de columna sea diferente de cómo .net convierte el tipo CLR.