我有代码
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);
答案 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);
}
}
}