搜索全部只给出最后一行
本文关键字:一行 最后 全部 搜索 | 更新日期: 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 方法,用于在生成后将其转换为字符串。