c# - puede - system int32 parse
Int32.TryParse() o(int?) Command.ExecuteScalar() (7)
Tengo una consulta SQL que solo devuelve un campo: un ID de tipo INT.
Y tengo que usarlo como entero en el código C #.
¿En qué sentido es más rápido y usa menos memoria?
int id;
if(Int32.TryParse(command.ExecuteScalar().ToString(), out id))
{
// use id
}
o
int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
// use id.Value
}
o
int? id = command.ExecuteScalar() as int?;
if(id.HasValue)
{
// use id.Value
}
El último. Convert.ToInt32()
también es una opción.
La diferencia entre los tres resultados es insignificante. El cuello de botella está moviendo los datos de la base de datos a su aplicación, no una conversión trivial o una llamada de método.
Yo iría con:
int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
// use id.Value
}
Falla antes , si un día la gente cambia el comando para devolver una cadena o una fecha, al menos se bloqueará y tendrás la oportunidad de arreglarlo.
También iría con un int
simple SI siempre esperaba que el comando devolviera un solo resultado.
Tenga en cuenta que, por lo general, prefiero devolver un parámetro de salida que ejecutar escalar, ejecutar escalar se siente frágil (la convención de que la primera columna en la primera fila es un valor de retorno no es el adecuado para mí).
Si espera que el comando devuelva nulo, debe tener en cuenta que la base de datos nula ( DBNull ) no es lo mismo que .NET nulo. Entonces, ¿la conversión de DBNull a int? fallaría.
Sugeriría lo siguiente:
object result = command.ExecuteScalar();
int? id = (int?)(!Convert.IsDBNull(result) ? result : null);
Si nada de lo anterior funciona (especialmente para los usuarios que luchan con MySQL), ¿por qué no intenta lo siguiente?
int id = Convert.ToInt32(cmd.ExecuteScalar().ToString());
Utilice id.HasValue para obtener el máximo factor de frialdad del tipo anulable.
if ((Int32)cmd.ExecuteScalar () ** 1) //en esta parece qu esta el error pero no lo veo
{
Response.Redirect("Default.aspx");
}
else
{
Response.Redirect("error.htm") ;
}
int Result = int.Parse(Command.ExecuteScalar().ToString());
Trabajará en C #.