搜索全部仅给出最后一行

时间:2016-01-26 18:48:15

标签: c# mysql

我试图从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;
    }

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

4 个答案:

答案 0 :(得分: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();

如果您不想使用换行符,可以使用Append而不是AppendLine,但我建议在这种情况下添加一些内容以指示行分隔。

答案 1 :(得分: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;
    }

答案 2 :(得分:0)

在你的while循环中,每次循环运行时你都会继续替换pList,也许可以尝试在数组中追加或存储它们。

答案 3 :(得分:0)

在你的while循环中,你将pList设置为等于行,所以当你完成时,它只会包含你读取的最后一行。

改为使用pList.Append。

(编辑:糟糕,将其读作StringBuilder而不是字符串。您可以使用+ =,但StringBuilder更有效。然后只需调用.ToString方法将其转换为字符串。)< / p>