【发布时间】:2018-02-02 03:51:19
【问题描述】:
我决定更改代码以执行批处理作业,而不是为每个项目插入新查询,这将减少插入所有新项目所需的时间。
完成此操作后,我注意到我需要为新的 GameItem 类实例插入最后一个 ID 作为它的 ID,我该如何解决这个问题?
public static List<GameItem> CreateMultipleItems(ItemData data, PlayerData playerData, string ExtraData, int Amount, int GroupId = 0)
{
if (data == null)
{
throw new InvalidOperationException("Data cannot be null.");
}
var items = new List<GameItem>();
using (var dbConnection = Program.Server.DatabaseHandler.Connection)
{
var queries = new List<string> {"INSERT INTO `habbo_items` (base_item,user_id,room_id,x,y,z,wall_pos,rot,extra_data) VALUES "};
for (var i = 0; i < Amount; i++)
{
queries.Add(string.Format("('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",
MySqlHelper.EscapeString(data.Id.ToString()),
MySqlHelper.EscapeString(playerData.Id.ToString()),
MySqlHelper.EscapeString("0"),
MySqlHelper.EscapeString("0"),
MySqlHelper.EscapeString("0"),
MySqlHelper.EscapeString("0"),
MySqlHelper.EscapeString(""),
MySqlHelper.EscapeString("0"),
MySqlHelper.EscapeString(ExtraData)
) + ",");
var item = new GameItem(Convert.ToInt32(dbConnection.GetLastId()), 0, data.Id, ExtraData, 0, 0, 0, 0, playerData.Id, GroupId, 0, 0, "");
if (GroupId > 0)
{
dbConnection.SetQuery("INSERT INTO `habbo_items_groups` (`id`, `group_id`) VALUES (@id, @gid)");
dbConnection.AppendParameter("id", item.Id);
dbConnection.AppendParameter("gid", GroupId);
dbConnection.ExecuteNonQuery();
}
items.Add(item);
}
dbConnection.SetBatch(queries);
dbConnection.ExecuteNonQuery();
}
return items;
}
【问题讨论】: