Piszę metodę zwracania wiersz "aktywów" z bazy danych. Zawiera łańcuchy, int i tablicę bajtów (może to być obraz/film/dokument).Najbardziej efektywny sposób, aby uzyskać wiersz danych z DB W ASP.NET
Teraz dla większości dostępu do wiersza używam następującej metody, która zwraca wartość NameValueCollection, ponieważ jest to obiekt o niewielkiej wadze, łatwy w użyciu i rzutujący int i łańcuchy.
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;
}
Teraz mój apporach do tego rodzaju dostępu do danych będzie zwykle uzyskać metodę zwracania 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;
}
To wydaje się trochę marnować czas, aby utworzyć DataTable, a następnie zwrócić jego pierwszy datarow.
Czy jest lepszy sposób to zrobić?
Myślę, że może być Słownikiem obiektów, które następnie ręcznie rzucam każdego członka.
Byłoby interesujące zobaczyć, jak inni sobie z tym poradzili. Wiem, że ten rodzaj wpada w pole mikro optymalizacji i tak długo, jak nie zwracam zestawów danych dla każdego wiersza zapytania (chciałbym mieć funta za każdym razem, gdy widziałem to w linii kodu) powinno być w porządku.
To powiedziawszy, że ta metoda będzie prawdopodobnie wywoływana w przypadku wielu zapytań o dostęp do danych na wielu stronach w jednym pudełku.
Cheers
Steve
Tylko mały numer, ale osoba wywołująca powinna wywoływać metodę DbCommand.Dispose, a nie metody odczytu danych. Ponieważ Twój program wywołujący podał obiekt dbCommand, powinien go odrzucić. –