reader.Read()只读一次,即使有多行要读取

时间:2016-04-07 12:15:48

标签: c# while-loop ado.net

我有代码

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++;
}

在调试我的代码后,我看到包含4个条目。但是,只有第一个结果是从读者那里读取的。在第一次迭代之后,查找返回的结果是否为null,然后循环再次启动并立即完成,即使还有三行要读取。

关于为什么会发生这种情况的任何想法都会受到启发。

编辑 - 这是我使用的读者

OleDbDataReader reader = dBConn.DataSelect("SELECT player1_IP, player2_IP, player3_IP, player4_IP FROM running_games WHERE game_name = '" + gameName + "'", updateGameList);

3 个答案:

答案 0 :(得分:2)

DbDataReader的索引器(DataReader是其他东西)或数据库特定的子类,返回指定的值(index or name)。

DbDataReader.Read()移动到下一行。

如果要将相同的逻辑应用于多个列,则需要遍历列行:

while (db.Read()) {

  for (var colIdx = 0; colIdx < columnCount. ++colIdx) {
    if (!db.IsDbNll(colIdx)) {
      string value = db.GetString(colIdx);
      // Process value
    }
  }

}

答案 1 :(得分:0)

增量器是不必要的。 reader.Read()前进到下一条记录,如果没有更多行,则返回false

检查msdn

上的文档

答案 2 :(得分:0)

你正在增加&#34;增量&#34;好像那是行号,但DataReader每个Read()只保存一行,索引是字段编号。

使用此:

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);
        }
    }
}