/// <summary>
/// Reference the data for a server by the server name. If the data
/// was not yet available, it is retrieved from the database.
/// </summary>
/// <param name="ServerName">Supplies the object name.</param>
/// <param name="Database">Supplies the database connection to use for
/// queries, if required. The active rowset may be consumed.</param>
/// <returns>The object data is returned, else null if the object did
/// not exist.</returns>
public GameServer ReferenceServerByName(string ServerName, IALFADatabase Database)
{
//
// Check if the object is already known first.
//
GameServer Server = (from S in Servers
where S.ServerName.Equals(ServerName, StringComparison.InvariantCultureIgnoreCase)
select S).FirstOrDefault();
if (Server != null)
return Server;
//
// Need to pull the data from the database.
//
if (Database == null)
return null;
Database.ACR_SQLQuery(String.Format(
"SELECT `ID`, `IPAddress`, `Name` FROM `servers` WHERE `Name` = '{0}'",
Database.ACR_SQLEncodeSpecialChars(ServerName)));
if (!Database.ACR_SQLFetch())
return null;
Server = new GameServer(this);
Server.ServerId = Convert.ToInt32(Database.ACR_SQLGetData(0));
Server.SetHostnameAndPort(Database.ACR_SQLGetData(1));
Server.ServerName = Database.ACR_SQLGetData(2);
InsertNewServer(Server, Database);
return Server;
}