我試圖讓服務器從SQL數據庫中讀取int'rank',但是我得到了「使用未分配的本地變量」,因爲它沒有讀取'rank '直到它應該被設置在while語句中,但是我無法將其移出,因爲它在進入try和catch之前不會執行SQL Query。使用未分配的本地變量 - SQL + C#
具體位置:
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
rank = rdr.GetInt32("rank");
}
的完整代碼:
class Ban : ICommand
{
public string Command { get { return "ban"; } }
public int RequiredRank { get { return 3; } }
public void Execute(Player player, string[] args)
{
int rank;
string name = "'" + args[0] + "'";
if (args.Length == 0)
{
player.SendHelp("Usage: /ban <username>");
}
try
{
using (Database dbx = new Database())
{
var cmd = dbx.CreateQuery();
cmd.CommandText = "SELECT rank FROM accounts where [email protected]";
cmd.Parameters.AddWithValue("@name", name);
cmd.ExecuteNonQuery();
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
rank = rdr.GetInt32("rank");
}
Console.Write("{0} ({1}) tried to ban {2}({3})", player.Name, player.Client.Account.Rank, name, rank);
if (rank < player.Client.Account.Rank)
{
var cmda = dbx.CreateQuery();
cmda.CommandText = "UPDATE accounts SET banned=1, rank=0 WHERE [email protected]";
cmda.Parameters.AddWithValue("@name", args[0]);
if (cmda.ExecuteNonQuery() == 0)
{
player.SendInfo("Could not ban");
}
else
{
foreach (var i in player.Owner.Players)
{
if (i.Value.nName.ToLower() == args[0].ToLower().Trim())
{
i.Value.Client.Disconnect();
player.SendInfo("Account successfully Banned");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Out.WriteLine(args[0] + " was Banned.");
Console.ForegroundColor = ConsoleColor.White;
}
}
}
}
else if (rank >= player.Client.Account.Rank)
player.SendInfo("Could not ban");
}
}
catch
{
player.SendInfo("Could not ban");
}
}
}