0

我正在使用 Access 2007 和 C# 来学习数据库。到目前为止,这很艰难,但我已经能够相对较好地处理事情了。我需要做的是根据他们的密码查询我的数据库表 Accounts 以获取用户拥有的金额。我在我正在使用的 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
        }
}   
4

1 回答 1

1

“C:\Users\Public”需要改成你要访问的*.mdb文件的实际路径:

"C:\Users\Public.mdb"

或者

“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-2007http://www.connectionstrings.com/access

此外,如果您在其他程序(如 Access 2007)中打开文件,文件被标记为只读,或者安全权限使您没有读取或写入访问权限,有时您会遇到此类问题。请注意,如果您为像用户这样的组设置“拒绝”权限(在文件系统/NTFS 中),那么它将覆盖所有其他权限,这样管理员就会受到拒绝权限的影响。

编辑:感谢您的评论,添加了一些说明。

于 2009-04-06T06:25:03.323 回答