c# - hasrows - reader.Read() solo lee una vez, incluso cuando hay varias filas para leer
sql data reader vb (3)
El indexador de DbDataReader
( DataReader
es otra cosa) o una subclase específica de la base de datos, devuelve el valor especificado (por índice o nombre ).
Mientras DbDataReader.Read()
mueve a la siguiente fila.
Si desea aplicar la misma lógica a varias columnas, debe recorrer las columnas y las filas:
while (db.Read()) {
for (var colIdx = 0; colIdx < columnCount. ++colIdx) {
if (!db.IsDbNll(colIdx)) {
string value = db.GetString(colIdx);
// Process value
}
}
}
Tengo el código
while (reader.Read())
{
if (reader[incrementer]!=DBNull.Value){
string playerToInform = reader.GetString(incrementer).ToString();
string informClientMessage = "ULG=" + clientIP + ","; //User Left Game
byte[] informClientsMessage = new byte[informClientMessage.Length];
informClientsMessage = Encoding.ASCII.GetBytes(informClientMessage);
playerEndPoint = new IPEndPoint(IPAddress.Parse(playerToInform), 8001);
clientSocket.SendTo(informClientsMessage, playerEndPoint);
}
incrementer++;
}
que después de depurar mi código que veo contiene 4 entradas. Sin embargo, solo el primer resultado es leído por el lector. Después de la primera iteración para encontrar si el resultado devuelto es nulo o no, el ciclo comienza de nuevo e inmediatamente termina a pesar de que hay tres filas más para leer.
Cualquier idea sobre por qué esto puede estar ocurriendo sería aprehendida.
editar - este es el lector que utilicé
OleDbDataReader reader = dBConn.DataSelect("SELECT player1_IP, player2_IP, player3_IP, player4_IP FROM running_games WHERE game_name = ''" + gameName + "''", updateGameList);
Está incrementando el "incremento" como si ese fuera el número de fila, pero un DataReader solo tiene una fila por Lectura () y la indexación es para el número del campo.
Utilizar esta:
while (reader.Read())
{
for(int colNum = 0; colNum < 4; colNum++)
{
if (reader[colNum]!=DBNull.Value)
{
string playerToInform = reader.GetString(colNum).ToString();
string informClientMessage = "ULG=" + clientIP + ","; //User Left Game
byte[] informClientsMessage = new byte[informClientMessage.Length];
informClientsMessage = Encoding.ASCII.GetBytes(informClientMessage);
playerEndPoint = new IPEndPoint(IPAddress.Parse(playerToInform), 8001);
clientSocket.SendTo(informClientsMessage, playerEndPoint);
}
}
}
Incrementer es innecesario. reader.Read()
avanza al siguiente registro y devuelve false
si no hay más filas.
Consulte la documentación en msdn