Pregunta

Tengo una consulta SQL que devuelve un solo campo -. Un ID de tipo INT

Y tengo que usarlo como número entero en código C #.

¿Qué camino 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
}
¿Fue útil?

Solución

La diferencia entre los tres se refiere a rendimiento es insignificante. El cuello de botella está moviendo los datos de la base de datos para su aplicación, no un trivial yeso o una llamada al método.

Me gustaría ir con:

int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
  // use id.Value
}

falla anterior , si un día la gente cambia el comando para devolver una cadena o una fecha, al menos que se colgará y usted tendrá la oportunidad de solucionarlo.

También me gustaría ir con un simple molde int si Siempre esperaba la orden para devolver un solo resultado.

Tenga en cuenta, por lo general prefieren devolver un parámetro a cabo haciendo que el escalar ejecutar, ejecutar escalar siente frágil (la convención de que la primera columna de la primera fila es un valor de retorno no se sienta bien para mí).

Otros consejos

Si espera que el comando para volver nula, se debe tener en cuenta que la base de datos nulos ( DBNull ) no es lo mismo como nulo .NET. Por lo tanto, la conversión de DBNull a int? fallaría.

Me gustaría sugerir lo siguiente:

object result = command.ExecuteScalar();
int? id = (int?)(!Convert.IsDBNull(result) ? result : null);

Si ninguno de los trabajos anteriores (especialmente para los usuarios que están luchando con MySQL) ¿por qué no tratar el siguiente?

int id = Convert.ToInt32(cmd.ExecuteScalar().ToString());
int Result = int.Parse(Command.ExecuteScalar().ToString());

funcionará en C #.

El último. Convert.ToInt32() es también una opción.

Uso id.HasValue para una máxima anulable Tipo fresco factor!

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") ;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top