Используемая база данных доступа C # или ошибка разрешения - PullRequest
0 голосов
/ 06 апреля 2009

Я использую Access 2007 и C # для изучения баз данных. Пока это было грубо, но я смог справиться с ситуацией относительно хорошо. Что мне нужно сделать, так это запросить в моей таблице базы данных «Счета» сумму денег, которую пользователь имеет на основе своего пин-кода. Я поместил кнопку в форму Windows, которую я использую, которая будет запрашивать базу данных при нажатии. Когда я запускаю / нажимаю кнопку, как обычно, я получаю следующую ошибку.

По сути, мой вопрос заключается в следующем: как мне настроить права доступа, чтобы моя программа могла свободно обращаться к имеющейся у меня базе данных Access?

Моя ошибка исключения:

Исключение: System.Data.OleDb.OleDbException: ядро ​​базы данных Microsoft Office Access не может открыть или записать файл «C: \ Users \ Public». Он уже открыт исключительно другим пользователем, или вам нужно разрешение на просмотр и запись его данных.

Мой код:

  public partial class frmPin : Form
{
    static string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Public;Persist Security Info=True";
    static private int pin = 11; //The First Pin in my records, for debugging I inserted it directly.
    static string selectStatement = "SELECT Amount FROM Accounts WHERE(PIN=" + pin + ")";
    OleDbConnection conn = new OleDbConnection(connString);
    OleDbCommand cmd = new OleDbCommand(selectStatement);



    public frmPin()
    {
        InitializeComponent();

    }

    private void btnQry_Click(object sender, EventArgs e)
    {
       try
       {
           conn.Open();
           OleDbDataReader reader = cmd.ExecuteReader(); // executes query
           while (reader.Read()) // if can read row from database
            {
                txtBx.Text = reader.GetValue(1).ToString();
            }
        }
        catch (Exception ex)
        {
            txtBx.Text = "Exception: " + ex;  // Displays Exception
        }
        finally
        {
            conn.Close();  // finally closes connection
        }
}   

1 Ответ

1 голос
/ 06 апреля 2009

"C: \ Users \ Public" необходимо изменить на фактический путь к файлу * .mdb, к которому вы хотите получить доступ:

"C: \ Users \ Public.mdb"

OR

"C: \ Users \ Public \ Something.mdb"

В зависимости от названия вашей базы данных:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;Password=;

Или это может быть * .accdb файл. Такие как:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False;

См. http://www.connectionstrings.com/access-2007 и http://www.connectionstrings.com/access

Кроме того, иногда вы сталкиваетесь с такой проблемой, если у вас есть файл, открытый в другой программе, такой как Access 2007, файл помечен как Только для чтения, или разрешения безопасности таковы, что у вас нет прав на чтение или запись. , Обратите внимание, что если вы установите разрешение «Запретить» (в файловой системе / NTFS) для такой группы, как «Пользователи», то оно переопределит все остальные разрешения, так что разрешение «Запретить» будет влиять на администратора.

Редактировать: Спасибо за комментарии, добавлено небольшое уточнение.

...