2016-01-26 41 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而不是字符串。