I have changed my previous code so I am not using 'using'. It work earlier, and code in different class basically represent the same thing, but its working.
I have stared at it for 2 hours now and I just can't figure out where the problems might be.
I have only one reader but each time I am using DisplayFileContent method I am getting the error: Error: There is already an open DataReader associated with this command which must be closed first.
// May be public so we can display
// content of file from different forms.
public void DisplayFileContent(string filePath)
{
// Counting all entries.
int countEntries = 0;
// Encrypting/Decrypting data.
EncryptDecrypt security = new EncryptDecrypt();
using (OleDbConnection connection = new OleDbConnection())
{
connection.ConnectionString =
"Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + filePath + ";" +
"Persist Security Info=False;" +
"Jet OLEDB:Database Password=" +
hashPhrase.ShortHash(storedAuth.Password) + ";";
using (OleDbCommand command = new OleDbCommand
("Select * FROM PersonalData", connection))
{
OleDbDataReader read;
try
{
// Open database connection.
connection.Open();
// Create a data reader.
read = command.ExecuteReader();
// Clearing the textbox before proceeding.
txtDisplay.Text = string.Empty;
// 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++;
// Reading all values from the file as string.
// While each string is encrypted, we must decrypt them.
// User name and password is the same as user provided
// while authentication.
txtDisplay.Text += "=== Entry ID: " + read.GetValue(0) +
" ===" + Environment.NewLine;
txtDisplay.Text += "Type: " + security.Decrypt
(read.GetString(1), storedAuth.Password,
storedAuth.UserName) + Environment.NewLine;
if (!read.IsDBNull(2))
txtDisplay.Text += "URL: " +
security.Decrypt(read.GetString(2),
storedAuth.Password, storedAuth.UserName) +
Environment.NewLine;
if (!read.IsDBNull(3))
txtDisplay.Text += "Software Name: " +
security.Decrypt(read.GetString(3),
storedAuth.Password, storedAuth.UserName) +
Environment.NewLine;
if (!read.IsDBNull(4))
txtDisplay.Text += "Serial Code: " +
security.Decrypt(read.GetString(4),
storedAuth.Password, storedAuth.UserName) +
Environment.NewLine;
if (!read.IsDBNull(5))
txtDisplay.Text += "User Name: " +
security.Decrypt(read.GetString(5),
storedAuth.Password, storedAuth.UserName) +
Environment.NewLine;
if (!read.IsDBNull(6))
txtDisplay.Text += "Password: " +
security.Decrypt(read.GetString(6),
storedAuth.Password, storedAuth.UserName) +
Environment.NewLine;
txtDisplay.Text += Environment.NewLine;
}
}
else
{
txtDisplay.Text = "There is nothing to display! " +
"You must add something before so I can display anything here.";
}
// Displaying number of entries in the status bar.
tsslStatus.Text = "A total of " + countEntries + " entries.";
// Selecting 0 character to make sure text
// isn't completly selected.
txtDisplay.SelectionStart = 0;
command.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
}
}
command.ExecuteNonQuery();
at the end? – Duellocommand.ExecuteNonQuery()
is used forINSERT/UPDATE/DELETE
statements. When you have aSELECT
statement, you use a reader. It's either/or, never both. – Duello