Ciao atsap,
ti consiglio di usare un codice abbastanza diffuso (che io definisco pattern ormai) per aprirti una connessione,fare la query e farti tornare i dati scelti.
Il codice è questo:
public DataTable GetDati(string sql)
{
DataTable table = new DataTable();
using (SqlConnection cn = new SqlConnection(...ConnectionString...))
{
SqlCommand cmd = cn.CreateCommand();
cmd.CommandText = sql;
cn.Open();
IDataReader rd = cmd.ExecuteReader();
table.Load(rd);
}
return table;
}
come vedi, viene usato un "DataTable" (equivalente di rsTable se non ricordo male in Java) che quindi è dinamico sia come righe che come colonne, dipendente dalla stringa sql che vuoi eseguire, quindi direi che è più vicino a quello che ti serve fare (ad esempio se lo dai in pasto alla DataSource di una Gridview vai via tranquillo).
Non ti consiglio però di usare sempre DataTable e DataSet (quest'ultimo è un "macro-raggruppamento" di DataTable [e realzioni]), se hai delle query dove cambia solo la condizione di caricamento (il "where" per intenderci) allora ti conviene poi usare degli oggetti tuoi e raccoglierli in una collection, con un codice di questo tipo:
public static List<Contenuto> GetContenuto()
{
List<Contenuto> lista = new List<Contenuto>;
using (DbConnection conn = DbHelper.GetConnection())
{
conn.Open();
DbCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM contenuti";
DbDataReader rd = cmd.ExecuteReader();
while (rd.Read())
lista.Add(BuildContenuto(rd));
}
return lista;
}
private static Contenuto BuildContenuto(DbDataReader rd)
{
Contenuto c= new Contenuto();
c.Id = Convert.ToInt32(rd["id"]);
c.Data = Convert.ToDateTime(rd["data"]);
c.Titolo = Convert.ToString(rd["Titolo"]);
c.Testo = Convert.ToString(rd["Testo"]);
...
return c;
}
dove appunto non usi più la DataTable, ma hai un oggetto "contenuto" (nel codice di quel mio progetto si chiamava così, ma poi chiaramente sarà un oggetto tuo) che è tipizzato e ti aiuta molto dato che ti permette di lavorare con le sue proprietà che sono di un tipo ben definito, senza incappare quindi in errori a runtime magari dovuti a conversioni.
Questo è il modo "Domain-Design" ossia definisci le classi (con o senza Linq2Sql o Entity Framework) che compongono il tuo programma, e poi tramite questi metodi vai a leggerli/scriverli sul db...
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo