2009-10-01 16 views
12

Sul mio progetto corrente, per ottenere un valore singolo (selezionare la colonna dalla tabella dove id = val), il programmatore precedente passa attraverso un datarow, datatable e un sqldatadapter (e naturalmente sqlconnection) solo per ottenere quell'unico valore.Semplice selezione SQL in C#?

Esiste un modo più semplice per effettuare una query di selezione semplice? In PHP, posso semplicemente usare mysql_query e poi mysql_result e ho finito.

Sarebbe bello se solo potessi fare:

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

Grazie per eventuali suggerimenti.

+2

Dal momento che stavi chiedendo non solo soluzioni, ma anche suggerimenti, mi piacerebbe consigliarti di dare un'occhiata a LINQ, che non è solo per le query di database, ma aiuta un sacco! –

+9

+1: Devo ammettere l'allitterazione nella domanda titolo – Rik

+0

Raccomando anche il blocco dati della libreria aziendale. Rende semplice il lavoro della maggior parte delle chiamate db. http://msdn.microsoft.com/en-us/library/dd203099.aspx –

risposta

35

È possibile saltare il DataReader e il DataAdapter e chiamare semplicemente ExecuteScalar() sul 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

Grazie, probabilmente userò questa soluzione per ora. Grazie! – Chris

+1

Un punto da notare qui, 'ExecuteScalar' restituisce la prima riga della prima colonna del risultato. È meglio usare il nome del campo esplicitamente. Qualcosa di simile è ancora meglio 'seleziona top 1 MyField ... ordina per asc/desc' per ottenere il valore singolo richiesto. –

+0

Aggiungi questo spazio dei nomi 'using System.Data.SqlClient;' –

5

realtà, esiste un metodo SqlCommand.ExecuteScalar() che restituisca semplicemente il primo campo dalla prima fila dei risultati restituiti. Solo per te.

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

Esegue la query e restituisce la prima colonna della prima riga del set di risultati restituito dalla query. Le colonne o le righe aggiuntive vengono ignorate.

+0

+1 per "Solo per te" – Elliott

4

Si può fare qualcosa di molto simile:

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

Probabilmente si sta cercando SqlCommand e 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 per l'utilizzo del lettore. Ma non dovresti usare gli indici delle colonne !!! Inoltre, non è necessario il collegamento.Chiudi (è gestito con l'istruzione "using"). – Chris