tamaño - ¿Cómo recorro las filas con un lector de datos en C#?
saber el tamaño de una matriz en c# (8)
Sé que puedo usar while(dr.Read()){...}
pero eso bucles todos los campos en mi tabla, quiero recuperar todos los valores de la primera fila, y luego segundo ... y así sucesivamente.
Digamos que tengo una tabla como esta:
ID--------------Value1--------------Value2------------------Value3
1 hello hello2 hello3
2 hi1 hi2 hi3
primero quiero obtener, hello
, hello2
y hello3
y luego ir a la segunda fila y obtener todos los valores.
¿Hay una manera de lograr esto? Espero que alguien entienda lo que quiero decir.
Lo siento mucho, esto está resuelto ahora. Simplemente no estaba codificando bien ...
Y sí, el método SqlDataReader.Read () hace lo que se supone que debe hacer, de nuevo el error fue mío.
¿Cómo recorro las filas con un lector de datos en C #?
IDataReader. Read()
Read()
avanza al lector a la siguiente fila en el conjunto de resultados.
while(reader.Read()){
/* do whatever you''d like to do for each row. */
}
Entonces, para cada iteración de tu ciclo, harías otro ciclo, 0 al reader. FieldCount
FieldCount
y reader. GetValue(i)
llamadas reader. GetValue(i)
GetValue(i)
para cada campo.
La pregunta más importante es: ¿qué tipo de estructura desea utilizar para contener esa información?
En realidad, el método Read
itera sobre los registros en un conjunto de resultados. En tu caso, sobre las filas de la tabla. Entonces todavía puedes usarlo.
Esa es la forma en que funciona el DataReader
, está diseñado para leer las filas de la base de datos de una en una.
while(reader.Read())
{
var value1 = reader.GetValue(0); // On first iteration will be hello
var value2 = reader.GetValue(1); // On first iteration will be hello2
var value3 = reader.GetValue(2); // On first iteration will be hello3
}
No hay forma de obtener "toda la fila" de una vez; debe recorrer las filas, y para cada fila, debe leer cada columna por separado:
using(SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
string value1 = rdr.GetString(0);
string value2 = rdr.GetString(1);
string value3 = rdr.GetString(2);
}
}
Lo que hagas con esas cadenas que lees para cada fila depende totalmente de ti; podrías almacenarlas en una clase que hayas definido, o lo que sea ...
O puede intentar acceder a las columnas directamente por su nombre:
while(dr.Read())
{
string col1 = (string)dr["Value1"];
string col2 = (string)dr["Value2"];
string col3 = (string)dr["Value3"];
}
Supongamos que su DataTable tiene las siguientes columnas pruebe este código:
DataTable dt =new DataTable();
txtTGrossWt.Text = dt.Compute("sum(fldGrossWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldGrossWeight)", "").ToString();
txtTOtherWt.Text = dt.Compute("sum(fldOtherWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldOtherWeight)", "").ToString();
txtTNetWt.Text = dt.Compute("sum(fldNetWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldNetWeight)", "").ToString();
txtFinalValue.Text = dt.Compute("sum(fldValue)", "").ToString() == "" ? "0" : dt.Compute("sum(fldValue)", "").ToString();
int count = reader.FieldCount;
while(reader.Read()) {
for(int i = 0 ; i < count ; i++) {
Console.WriteLine(reader.GetValue(i));
}
}
Nota; si tiene múltiples cuadrículas, entonces:
do {
int count = reader.FieldCount;
while(reader.Read()) {
for(int i = 0 ; i < count ; i++) {
Console.WriteLine(reader.GetValue(i));
}
}
} while (reader.NextResult())
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
subjob.Items.Add(dr[i]);
}
}
para leer filas en una columna