c# - sqldbtype - sqlparameter type
SqlParameter con el valor predeterminado establecido en 0 no funciona como se esperaba (2)
Estaba haciendo algo como esto:
SqlParameter param = new SqlParameter("@Param", 0) { SqlDbType = SqlDbType.Int };
private void TestParam(SqlParameter param) {
string test = param.Value.ToString(); // Getting NullReferenceException here
}
Pero dejo de tener la excepción cuando lo pongo así:
SqlParameter param = new SqlParameter("@Param", SqlDbType.Int) { Value = 0 };
private void TestParam(SqlParameter param) {
string test = param.Value.ToString(); // Everything OK
}
¿Puede alguien decirme por qué SqlParameter supone que 0 es lo mismo que nulo?
Edición: MSDN explica esto aquí: SqlParameter Constructor
Tenga cuidado cuando use esta sobrecarga del constructor SqlParameter para especificar valores de parámetros enteros. Debido a que esta sobrecarga toma un valor de tipo Objeto, debe convertir el valor integral en un Tipo de Objeto cuando el valor sea cero, como lo demuestra el siguiente ejemplo de C #.
Parameter = new SqlParameter("@pname", Convert.ToInt32(0));
Si no realiza esta conversión, el compilador asume que está intentando llamar a la sobrecarga del constructor SqlParameter (string, SqlDbType).
Gracias Msdn :)
El 0 que está pasando es el tipo , no el valor. Se permiten 0 literales (y valores constantes) para cualquier tipo de enumeración, es decir, el 0 del tipo de enumeración subyacente, y son una mejor "coincidencia" que el objeto, ya que no necesita boxeo.
Personalmente, yo usaría;
Value = 0
Tal vez en el inicializador de objetos.