【问题标题】:Connectivity between access database and c#access数据库和c#之间的连接
【发布时间】:2012-11-16 05:33:47
【问题描述】:

我在 MSDN 的 social 中使用 c# 检查访问数据库连接,我发现示例连接字符串如下

string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\abc.mdb;Jet OLEDB:Database Password=password";

现在我的问题是假设我创建了一个表单应用程序并将数据库文件 abc.mdb 放在 .exe 文件所在的同一位置。这种情况下我可以这样写连接字符串吗?

string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=abc.mdb;Jet OLEDB:Database Password=password";

我正在使用 SQL 数据库文件尝试此操作,但它没有运行可能是这种情况下必须使用完整路径。我说的对吗?

【问题讨论】:

    标签: c# ms-access ado.net oledb


    【解决方案1】:

    如果您不能在连接字符串中使用相对路径,您可以在运行时生成它,例如:

    string connstring = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=true", Path.Combine(Directory.GetCurrentDirectory(), "MyDatabase01.accdb "));

    【讨论】:

      【解决方案2】:

      试试,(虽然没有测试

      string dbpath = AppDomain.CurrentDomain.BaseDirectory + "abc.mdb";
      string ConnStr = String.Format(Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Jet OLEDB:Database Password=password;", dbpath)
      

      【讨论】:

        【解决方案3】:

        要回答您的第一个问题,是的,将 .mdb 文件放在同一目录中将适用于您的第二个连接字符串。

        假设您在第二个“问题”中指的是 MSSQL 或 MSSQL Express,您需要将 SQL Server 实例指定为连接字符串的一部分。

        【讨论】:

          【解决方案4】:

          对于 ASP.NET 2.0 或更高版本,数据库文件(.mdb 或 .accdb)应始终位于 App_Data 文件夹中。这有两个原因:首先,App_Data 被配置为阻止用户浏览到该文件夹​​并下载您的数据库副本。其次,您可以利用特殊的 DataDirectory 标记(或替换字符串)在连接字符串中引用文件。 DataDirectory 默认为 App_Data 目录。

          所以你的 Access 数据源是这样的。

          <asp:AccessDataSource 
              ID="AccessDataSource1" 
              runat="server" 
              DataFile="~/App_Data/MyDb.mdb" 
              SelectCommand="Select * From MyTable">
          </asp:AccessDataSource>
          

          【讨论】:

          • 虽然您是对的,但 OP 专门询问了 Windows 窗体应用程序,因此您的答案并不真正相关......
          • 哦抱歉..有点急于回答这个问题... :)
          【解决方案5】:

          我没有对此进行测试,但可以使用DataDirectory 替换字符串。

          string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\abc.mdb;Jet OLEDB:Database Password=password";
          

          那你就可以了

          AppDomain.CurrentDomain.SetData("DataDirectory", @"D:\MyApp");
          

          如下所述KB article:

          |数据目录|替换字符串支持

          |DataDirectory|(用管道符号括起来)是一个替换字符串 表示数据库路径。因此,您不必 在代码中包含完整路径。当您将完整路径包含在 代码,您可能会遇到问题,因为完整的数据库路径 可以在不同的位置进行序列化。 |数据目录| 替换字符串还可以轻松共享项目并 部署应用程序。

          例如,如果您在代码中包含完整路径,则应用程序 可以有以下连接字符串。

          数据源= c:\program files\MyApp\Mydb.sdf

          如果您使用 |DataDirectory|替代 字符串,应用程序可以有以下连接字符串。

          数据 来源 = |DataDirectory|\Mydb.sdf

          要设置 DataDirectory 属性,请调用 AppDomain.SetData 方法。如果不设置 DataDirectory 属性,则应用以下默认规则来访问 数据库文件夹:

          • 对于放在文件夹中的应用程序 用户的计算机,数据库文件夹使用应用程序文件夹。
          • 为 在 ClickOnce(数据库文件夹)下运行的应用程序 使用创建的特定数据文件夹。

          【讨论】:

            猜你喜欢
            • 2020-10-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-08
            相关资源
            最近更新 更多