while recuperar mediante leer executereader ejemplos dbdatareader datos c# sql-server linq sqldatareader

c# - recuperar - sqldatareader to datatable



SqlDataReader-Cómo convertir la fila actual a un diccionario (5)

¿Hay una manera fácil de convertir todas las columnas de la fila actual de un SqlDataReader a un diccionario?

using (SqlDataReader opReader = command.ExecuteReader()) { // Convert the current row to a dictionary }

Gracias


El método GetValues ​​acepta y pone todos los valores en una matriz 1D.
¿Eso ayuda?


Encontré esta pregunta el 3/9/2016 y terminé usando la respuesta proporcionada por SLaks. Sin embargo, necesitaba modificarlo ligeramente para:

dataRowDictionary = Enumerable.Range(0, reader.FieldCount).ToDictionary(i => reader.GetName(i), i=> reader.GetValue(i).ToString());

Encontré la guía de esta pregunta de : convertir dataReader a Dictionary


Más fácil que esto ?:

// Need to read the row in, usually in a while ( opReader.Read ) {} loop... opReader.Read(); // Convert current row into a dictionary Dictionary<string, object> dict = new Dictionary<string, object>(); for( int lp = 0 ; lp < opReader.FieldCount ; lp++ ) { dict.Add(opReader.GetName(lp), opReader.GetValue(lp)); }

Todavía no estoy seguro de por qué necesitaría esta transformación particular de un tipo de colección a otra.


Puedes usar LINQ:

return Enumerable.Range(0, reader.FieldCount) .ToDictionary(reader.GetName, reader.GetValue);


Ya es un IDataRecord .

Eso debería darle casi el mismo acceso (por clave) que un diccionario. Dado que las filas no suelen tener más de unas pocas columnas, el rendimiento de las búsquedas no debería ser tan diferente. La única diferencia importante es el tipo de "carga útil", e incluso allí su diccionario tendría que usar el objeto para el tipo de valor, por lo que le doy la ventaja a IDataRecord.