Hel*_*der 5 c# oledb ms-access exception
我已经更改了以前的代码,所以我没有使用'使用'.它工作得更早,不同类中的代码基本上代表相同的东西,但它的工作.
我现在盯着它看了2个小时,我无法弄清问题可能出在哪里.
我只有一个阅读器,但每次我使用DisplayFileContent方法时,我收到错误:错误: 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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您正在catch块之前调用command.ExecuteNonQuery.您需要先关闭DataReader.
我建议在使用块中包装使用datareader的代码:
using(OleDbDatareader read = command.ExecuteReader())
{
...
}
Run Code Online (Sandbox Code Playgroud)
如上所述,command.ExecuteNonQuery()用于执行您不希望返回结果的命令.这些通常是插入,更新或删除,但也可能包括执行相同操作的存储过程调用,或者您不关心返回结果的存储过程调用
| 归档时间: |
|
| 查看次数: |
709 次 |
| 最近记录: |