2009-10-01 8 views
12

En mi proyecto actual, para obtener un valor único (seleccione la columna de la tabla donde id = val), el programador anterior pasa por un datarow, datatable y un sqldatadapter (y por supuesto sqlconnection) solo para obtener ese valor.¿Seleccionar SQL simple en C#?

¿Hay una manera más fácil de hacer una consulta de selección simple? En php, puedo usar mysql_query y luego mysql_result y listo.

Sería bueno si pudiera hacer:

SqlConnection conSql = new SqlConnection(ConnStr); 
SomeSqlClass obj = new SomeSqlClass(sql_string, conSql); 
conSql.Close(); 
return obj[0]; 

Gracias por cualquier consejo.

+2

Ya que estaba pidiendo no sólo soluciones, pero también consejos, me gustaría recomendarle que eche un vistazo a LINQ, que no es solo para consultas de bases de datos, sino que ayuda a mucho! –

+9

+1: debo admirar la aliteración en el título de pregunta – Rik

+0

También recomiendo el bloque de datos de la biblioteca de empresa. Hace el trabajo simple de la mayoría de las llamadas de db. http://msdn.microsoft.com/en-us/library/dd203099.aspx –

Respuesta

35

Puede omitir el DataReader y el DataAdapter y simplemente llamar al ExecuteScalar() en el comando sql.

using (SqlConnection conn = new SqlConnection(connString)) 
{ 
     SqlCommand cmd = new SqlCommand("SELECT * FROM whatever 
             WHERE id = 5", conn); 
     try 
     { 
      conn.Open(); 
      newID = (int)cmd.ExecuteScalar(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
} 
+0

Gracias, probablemente use esta solución por ahora. ¡Gracias! – Chris

+1

Un punto que debe tenerse en cuenta aquí, 'ExecuteScalar' devuelve la primera fila de la primera columna en el resultado. Es mejor usar el nombre de campo explícitamente. Algo como esto es aún mejor 'seleccionar top 1 MyField ... ordenar por asc/desc' para obtener el valor único requerido. –

+0

Agregue este espacio de nombres 'usando System.Data.SqlClient;' –

5

En realidad, hay un método SqlCommand.ExecuteScalar() que simplemente se devolverá el primer campo de la primera fila de los resultados obtenidos. Solo para ti.

.NET Framework Class Library SqlCommand..::.ExecuteScalar Method

Ejecuta la consulta y devuelve la primera columna de la primera fila del conjunto de resultados devuelto por la consulta. Se ignoran columnas o filas adicionales.

+0

+1 para "Solo para ti" – Elliott

4

Usted puede hacer algo muy similar:

using (SqlConnection conn = new SqlConnection(ConnStr)) 
using (SqlCommand cmd = new SqlCommand(sql_string, conn)) 
{ 
    conn.Open(); 
    return cmd.ExecuteScalar(); 
} 
8

Usted probablemente está buscando SqlCommand y SqlDataReader

Dictionary<int, string> users = new Dictionary<int, string>(); 
using(SqlConnection connection = new SqlConnection("Your connection string")) 
{ 
    string query = "SELECT UserId, UserName FROM Users"; 
    SqlCommand command = new SqlCommand(query, connection); 
    connection.Open(); 
    using (SqlDataReader reader = command.ExecuteReader()) 
    { 
     while (reader.Read()) 
      users.Add(reader.GetInt32(0), reader.GetString(1)); 
    } 
    connection.Close(); 
} 
+2

+1 para usar el lector. ¡¡Pero no deberías usar índices de columna !!! Además, no necesita la conexión. Cierre (se trata con la instrucción "usar"). – Chris