2009-04-06 5 views
0

私はAccess 2007とC#を使用してデータベースを学習しています。これまでは荒いですが、私は物事を比較的うまく処理することができました。私がしなければならないのは、自分のデータベーステーブルを照会することです。ユーザーがピンに基づいて金額を計算します。私はクリックするとデータベースを照会するために使用しているWindowsフォームにボタンを配置しました。私は通常/私は次のエラーを受け取るようにボタンを実行/クリックすると。C#アクセスデータベースの使用中または許可の失敗

Essentially my question is this: How would I go about setting the permissions up so that my program can freely access the Access Database I have?

私の例外エラー:

Exception: System.Data.OleDb.OleDbException: The Microsoft Office Access database engine cannot open or write to the file 'C:\Users\Public'. It is already opened exclusively by another user, or you need permission to view and write its data.

マイコード:

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

"C:\ユーザーは、公開を\は" * .mdbファイルの実際のパスに変更する必要があります

"C:\ Users \ Public.mdb"

OR

:データベースの名前に応じて、

"C公開\ 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; 

あなたがアクセス2007のような別のプログラムでファイルを開くを持っている場合、ファイルは読み取り専用としてマークされhttp://www.connectionstrings.com/access-2007http://www.connectionstrings.com/access

はまた、時々、あなたはこの種の問題を取得する参照してください、またはセキュリティアクセス許可は、ユーザーが読み取りまたは書き込みアクセス権を持たないようなものです。ユーザーのようなグループに対して "拒否"アクセス許可(ファイルシステム/ NTFS)を設定すると、拒否アクセス許可によって管理者が実行されるように、他のすべてのアクセス許可が上書きされます。

編集:コメントありがとうございます。少し説明が追加されました。

+0

ああ、ファイル自体を含める必要があります。助けてくれてありがとうございました。 – Xesaniel

+0

* .accdbファイルの場合、ユーザレベルのセキュリティがエンジンから削除されているため、グループ/ユーザに対する権限を拒否できません。 – onedaywhen

+1

Jet ULSは決して拒否権を持っていないので、aaronisがNTFSセキュリティを指していたことは明らかです。 –

関連する問題