c# - example - SqlCommand parametrizado: ¿ventaja de especificar SqlDbType?
sqlcommand executenonquery() (4)
La principal ventaja es el rendimiento. Si no especifica el tipo de parámetro, el motor SqlClient lo deducirá del valor del parámetro. Si conoce el tipo de parámetro en tiempo de diseño, especificarlo es una forma simple de evitar el costo del paso de inferencia.
Gente,
A menos que me equivoque, se puede generar una consulta sql parametrizada especificando SqlDbType para cada parámetro o no. Parece que puedo construir un parámetro SqlParameter proporcionando solo el nombre del parámetro y el valor del parámetro. ¿Cuál es la ventaja de especificar SqlDbType?
Si especifica SqlDbType, asegúrese de que el valor que proporciona para el parámetro se valida con SqlDbType proporcionado, por lo que si los datos no coinciden, se detectaría un error anterior (de lo contrario, se obtendría una excepción de SQL Server).
El beneficio es: usted tiene un control claro sobre qué SqlDbType
será el parámetro.
De lo contrario, ADO.NET tiene que adivinar, en función del valor que proporcione, por ejemplo, en el método .AddWithValue
. Esas conjeturas son bastante buenas la mayor parte del tiempo, pero si pones, por ejemplo, un DBNull.Value
, es un poco complicado hacer una suposición realmente bien pensada ...
Además, si proporciona una cadena, a menudo es beneficioso poder especificar el máximo. longitud de ese parámetro de cadena (la x
en la definición VARCHAR(x)
en el proceso almacenado). Si no lo hace, ADO.NET usará la longitud actual, y eso podría ser bueno o malo a veces.
Entonces, en general: solo te da más control y es más explícita / más clara cuáles son tus intenciones.
Estoy de acuerdo en que al usar un SqlDbType específico obtienes más control. Otra razón por la que desea tener más control cuando se trata de texto es cuando se trata de texto unicode. Por ejemplo, usando SqlDbType.NVarChar Vs SqlDbType.VarChar.