Sto scrivendo un metodo per restituire una riga 'risorsa' dal database. Contiene stringhe, interi e una matrice di byte (questa potrebbe essere un'immagine/film/documento).Il modo più efficiente per ottenere una riga di dati dal DB in ASP.NET
Ora per la maggior parte dell'accesso di riga, utilizzo il seguente metodo che restituisce un NameValueCollection in quanto è un oggetto leggero, facile da usare e da trasmettere int e stringhe.
public static NameValueCollection ReturnNameValueCollection(Database db, DbCommand dbCommand)
{
var nvc = new NameValueCollection();
using (IDataReader dr = db.ExecuteReader(dbCommand))
{
if (dr != null)
{
while (dr.Read())
{
for (int count = 0; count < dr.FieldCount; count++)
{
nvc[dr.GetName(count)] = dr.GetValue(count).ToString();
}
}
}
}
dbCommand.Dispose();
return nvc.Count != 0 ? nvc : null;
}
Ora la mia suddetto approccio a questo tipo di accesso ai dati sarebbe normalmente per ottenere un metodo per restituire un DataRow.
public static DataRow ReturnDataRow(Database db, DbCommand dbCommand)
{
var dt = new DataTable();
using (IDataReader dr = db.ExecuteReader(dbCommand))
if (dr != null) dt.Load(dr);
dbCommand.Dispose();
return dt.Rows.Count != 0 ? dt.Rows[0] : null;
}
Sembra un po 'inutile creare un DataTable e quindi restituire il suo primo datarow.
C'è un modo migliore per farlo?
Sto pensando forse a un dizionario di oggetti che poi ho lanciato manualmente ogni membro di.
Sarebbe interessante vedere come altri hanno affrontato questo. So che questo tipo rientra nel campo dell'ottimizzazione micro e fintanto che non restituisco i DataSet per ogni query di riga (vorrei avere un chilo per ogni volta che l'ho visto in una riga di codice) dovrebbe essere ok.
Detto questo è probabile che questo metodo venga chiamato per l'assegnazione di query di accesso ai dati su tutti i siti su una casella.
Acclamazioni
Steve
Solo un piccolo problema, ma il chiamante deve chiamare il metodo DbCommand.Dispose, non i metodi di lettura dei dati. Poiché il tuo chiamante ha fornito l'oggetto dbCommand, dovrebbe dipingerlo. –