搜索全部只给出最后一行

本文关键字:一行 最后 全部 搜索 | 更新日期: 2023-09-27 18:31:55

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

看过很多使用这种技术的例子,我错过了什么还是需要循环?

搜索全部只给出最后一行

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

    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,但我建议在这种情况下添加一些东西来指示行分隔。

每次分配给 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;
    }
在你的 while 循环中,

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

在 while 循环中,您将 pList 设置为等于该行,因此当您完成后,它将只包含您读取的最后一行。

请改用 pList.Append。

(编辑:哎呀,把它读成一个字符串生成器而不是一个字符串。 你可以使用 +=,但 StringBuilder 更有效率。 然后只需调用 .ToString 方法,用于在生成后将其转换为字符串。