2016-01-26 39 views
0

我想从C#中的表中总共拉出24行,但它只拉最后一行。搜索所有只给最后一行

static class RoomObjects 
{ 
    public static string buildObjects(int roomid) 
    { 
     string pList = ""; 
     MySqlDataReader mysqlRead = DBManager.database.getCommand("SELECT * FROM `objects` WHERE `roomid` = " + roomid + "").ExecuteReader(); 

     while(mysqlRead.Read()) 
     { 
      pList = mysqlRead["id"].ToString() + (char)8 + mysqlRead["sprite"].ToString() + (char)8 + mysqlRead["x"].ToString() + (char)8 + mysqlRead["y"].ToString() + (char)8 + mysqlRead["z"] + (char)8 + mysqlRead["rotation"] + (char)8; 
     } 

     DBManager.database.closeClient(); 

     return pList; 
    } 

我见过很多使用这种技术的例子,我错过了什么,或者我需要循环吗?

回答

0

每次您分配给pList的时候,你会忘了以前在里面。

如果你想存储你的结果包含每个你需要将其追加到字符串,而不是分配给它的值的字符串。就像这样:

static class RoomObjects 
{ 
    public static string buildObjects(int roomid) 
    { 
     string pList = ""; 
     MySqlDataReader mysqlRead = DBManager.database.getCommand("SELECT * FROM `objects` WHERE `roomid` = " + roomid + "").ExecuteReader(); 

     while(mysqlRead.Read()) 
     { 
      pList += mysqlRead["id"].ToString() + (char)8 + mysqlRead["sprite"].ToString() + (char)8 + mysqlRead["x"].ToString() + (char)8 + mysqlRead["y"].ToString() + (char)8 + mysqlRead["z"] + (char)8 + mysqlRead["rotation"] + (char)8; 

      pList += "," // to separate the values. 
     } 

     DBManager.database.closeClient(); 

     return pList; 
    } 
+0

我不能相信我错过了!很好,谢谢。 –

+0

对于不止一对追加调用,StringBuilder是一个更好的选择。 –

0

在while循环,你继续替换每个循环运行时间pList,也许尝试追加或保存那些在数组中。

1

您每次都重新分配变量,而不是追加到它。试试这个:

var pList = new StringBuilder(); 
    MySqlDataReader mysqlRead = DBManager.database.getCommand("SELECT * FROM `objects` WHERE `roomid` = " + roomid + "").ExecuteReader(); 

    while(mysqlRead.Read()) 
    { 
     pList.AppendLine(mysqlRead["id"].ToString() + (char)8 + mysqlRead["sprite"].ToString() + (char)8 + mysqlRead["x"].ToString() + (char)8 + mysqlRead["y"].ToString() + (char)8 + mysqlRead["z"] + (char)8 + mysqlRead["rotation"] + (char)8); 
    } 

    DBManager.database.closeClient(); 

    return pList.ToString(); 

您可以使用附加,而不是AppendLine如果你不想换行,但我建议增加一些指示在这种情况下,行分离。

0

在while循环,你设置的plist等于行,所以当你完成,它只会包含你读的最后一排。

改为使用pList.Append。你可以使用+ =,但是一个StringBuilder更有效率,然后只要调用.ToString方法将其转换为一个字符串,就可以将它转换为一个字符串。)编辑:O​​ops,读取它作为StringBuilder而不是字符串。