我试图从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 :(得分: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>