J'essaie de faire lire par le serveur l'int 'rank' de la base de données SQL, mais je reçois "Utilisation de la variable locale non assignée" parce qu'elle ne lit pas "rank 'jusqu'à ce qu'il soit supposé être mis dans une déclaration while, cependant je ne peux pas le déplacer parce qu'il n'exécute pas la requête SQL jusqu'à ce qu'il entre dans l'essai et attrape.Utilisation de la variable locale non affectée - SQL + C#
spécifiquement ici:
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
rank = rdr.GetInt32("rank");
}
Le code complet:
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");
}
}
}