Estoy escribiendo un método para devolver una fila de 'activos' desde la base de datos. Contiene cadenas, ints y una matriz de bytes (esto podría ser una imagen/película/documento).Manera más eficiente para obtener una fila de datos de la base de datos en ASP.NET
Ahora, para el acceso a la mayoría de las filas, utilizo el siguiente método, que devuelve NameValueCollection, ya que es un objeto liviano, fácil de usar y para interpretar int y strings.
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;
}
Ahora mi objetivo para este tipo de acceso a datos normalmente sería obtener un método para devolver 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;
}
Parece un desperdicio crear una DataTable y luego devolver su primer datarow.
¿Hay una mejor manera de hacerlo?
Estoy pensando que tal vez un diccionario de objetos que a continuación, de forma manual cada miembro de.
Sería interesante ver cómo otros han abordado esto. Sé que esto cae en el campo de la micro optimización y siempre que no devuelva DataSets para cada consulta de fila (desearía tener una libra por cada vez que lo vi en una línea de código) debería estar bien.
Dicho esto, es probable que se requiera este método para asignar consultas de acceso a datos en un lote de sitios en un cuadro.
Saludos
Steve
Sólo un pequeño problema, pero la persona que llama debe llamar al método DbCommand.Dispose, no a los métodos de lectura de datos. Como la persona que llama le proporcionó el objeto dbCommand, debe reducirlo. –