internal static void removeOne(Account account)
        {
            if (account.Login.Equals("admin")) throw new Exception("Невозможно удалить");

            account.Deleted = true;
            DataHelper.UpdateAccount(account);
            DataHelper.logAction(Actions.EditUser, "Удалён: " + account.Login);
        }
 internal static void changePassword(Account account, string password)
 {
     account.PassHash = hashPassword(password);
     DataHelper.UpdateAccount(account);
     DataHelper.logAction(Actions.EditUser, "Изменён пароль: " + account.Login);
 }
        internal static void changeRole(Account account, Roles role)
        {
            if (account.Login.Equals("admin")) throw new Exception("Невозможно изменить группу");

            account.Role = role;
            DataHelper.UpdateAccount(account);
            DataHelper.logAction(Actions.EditUser, "Группа изменена: " + account.Login + " -> " + role.ToString());
        }
 internal static Account AddAccount(string login, string p, Account.Roles role)
 {
     using (var con = OpenOrCreateDb())
     {
         using (var command = con.CreateCommand())
         {
             command.CommandText = String.Format("INSERT INTO Accounts(login, role, passhash) VALUES ('{0}',{1},'{2}');", login, (int)role, p);
             command.ExecuteNonQuery();
             return new Account()
             {
                 Login = login,
                 Role = role,
                 PassHash = p,
                 Name = null,
                 Data = null
             };
         }
     }
 }
 internal static void UpdateAccount(Account account)
 {
     using (var con = OpenOrCreateDb())
     {
         using (var command = con.CreateCommand())
         {
             command.CommandText = String.Format("UPDATE Accounts set role = {1}, passhash = '{2}', deleted = {3} WHERE login = '******';", account.Login, (int)account.Role, account.PassHash, account.Deleted ? 1 : 0);
             command.ExecuteNonQuery();
         }
     }
 }
 internal static void logAction(SqlConnection con, Account.Actions action, string arguments = null)
 {
     using (var command = con.CreateCommand())
     {
         command.CommandText = String.Format("INSERT INTO ActionLog (login, action, arguments, logDateTime) VALUES ('{0}','{1}','{2}', GETDATE())", Account.Current.Login, (int)action, arguments);
         command.ExecuteNonQuery();
     }
 }
 internal static void logAction(Account.Actions action, string arguments = null)
 {
     using (var con = OpenOrCreateDb())
     {
         logAction(con, action, arguments);
     }
 }
        internal static bool LastUserActionTime(string login, Account.Actions action, out DateTime dt)
        {
            using (var con = OpenOrCreateDb())
            {
                using (var command = con.CreateCommand())
                {
                    command.CommandText = String.Format("select max(logDateTime) from ActionLog where login = '******' and action = {1}", login, (int)action);

                    var result = command.ExecuteScalar();
                    if (result is DBNull)
                    {
                        dt = DateTime.MaxValue;
                        return false;
                    }
                    else
                    {
                        dt = (DateTime)result;
                        return true;
                    }
                }
            }
        }