Я не могу понять, почему мой подсчет данных не работает правильно? - PullRequest
0 голосов
/ 13 декабря 2011

Хорошо, мой подсчет работает несколько, это означает, что при добавлении и удалении данных отображается правильное число.

Проблема в том, что, если я добавляю только 1 запись, мне показывается, что у меня есть 1 запись, но если я удаляю единственную запись, которая есть, мой счетчик по-прежнему показывает 1. Почему не 0?

Вот как я это делаю (поля, где я обновляю заголовки моей панели, находятся внизу):

    public void DisplayFileContent(string filePath)
    {
        lvPC.Items.Clear();
        lvWeb.Items.Clear();
        lvSerialCode.Items.Clear();

        string hashShortPass = hash.ShortHash(storedAuth.Password);
        // Counting all entries.
        int countEntries = 0;

        int countPC = 0;
        int countWeb = 0;
        int countSerial = 0;

        string connectionString =
            @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0};
              Persist Security Info=False; Jet OLEDB:Database Password={1};";

        // Encrypting/Decrypting  data.
        Security security = new Security();

        using (OleDbConnection connection = new OleDbConnection())
        {
            connection.ConnectionString = string.Format(connectionString, filePath, hashShortPass);

            using (OleDbCommand command = new OleDbCommand
                ("Select * FROM PersonalData", connection))
            {
                try
                {
                    // Open database connection.
                    connection.Open();

                    using (OleDbDataReader read = command.ExecuteReader())
                    {
                        // Checking if there is any data in the file.
                        if (read.HasRows)
                        {
                            // Reading information from the file.
                            while (read.Read())
                            {
                                // Count all entries read from the reader.
                                countEntries++;

                                if (security.DecryptAES(read.GetString(1), 
                                    storedAuth.Password, storedAuth.UserName) 
                                        == "PC Password")
                                {
                                    // Count PC passwords.
                                    countPC++;
                                    PC.Tag = read.GetInt32(0);
                                    lvPC.Items.Add(PC);
                                }
                                else if (security.DecryptAES(read.GetString(1), 
                                    storedAuth.Password, storedAuth.UserName) 
                                        == "Web Site Password")
                                {
                                    countWeb++;
                                    Web.Tag = read.GetInt32(0);
                                    lvWeb.Items.Add(Web);
                                }
                                else if (security.DecryptAES(read.GetString(1), 
                                    storedAuth.Password, storedAuth.UserName) 
                                        == "Serial Code")
                                {
                                    countSerial++;
                                    Serial.Tag = read.GetInt32(0);
                                }

                                tabPage1.Text = "PC Passwords ( " + countPC + " )";
                                tabPage2.Text = "Web Site Passwords ( " + countWeb + " )";
                                tabPage3.Text = "Serial Codes ( " + countSerial + " )";
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: " + ex.Message);
                }
            }
        }
    }

1 Ответ

2 голосов
/ 13 декабря 2011

Проблема в том, что если вы удаляете запись, код, который обновляет метки, не выполняется.

Вам необходимо переместить следующий блок:

tabPage1.Text = "PC Passwords ( " + countPC + " )";
tabPage2.Text = "Web Site Passwords ( " + countWeb + " )";
tabPage3.Text = "Serial Codes ( " + countSerial + " )";

после }, связанного с этим утверждением:

if (read.HasRows)

Кроме того, поскольку HasRows не нужен, вы можете переписать его примерно так:

using (OleDbDataReader read = command.ExecuteReader())
{
    // Reading information from the file.
    while (read.Read())
    {
        // Count all entries read from the reader.
        countEntries++;

        if (security.DecryptAES(read.GetString(1), 
            storedAuth.Password, storedAuth.UserName) 
                == "PC Password")
        {
            // Count PC passwords.
            countPC++;
            PC.Tag = read.GetInt32(0);
            lvPC.Items.Add(PC);
        }
        else if (security.DecryptAES(read.GetString(1), 
            storedAuth.Password, storedAuth.UserName) 
                == "Web Site Password")
        {
            countWeb++;
            Web.Tag = read.GetInt32(0);
            lvWeb.Items.Add(Web);
        }
        else if (security.DecryptAES(read.GetString(1), 
            storedAuth.Password, storedAuth.UserName) 
                == "Serial Code")
        {
            countSerial++;
            Serial.Tag = read.GetInt32(0);
        }
    }
}

tabPage1.Text = "PC Passwords ( " + countPC + " )";
tabPage2.Text = "Web Site Passwords ( " + countWeb + " )";
tabPage3.Text = "Serial Codes ( " + countSerial + " )";
...