0

我在 MSDN 的社交网站中使用 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 数据库文件尝试此操作,但它没有运行可能是这种情况下必须使用完整路径。我说的对吗?

4

5 回答 5

1

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

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

于 2012-11-16T05:41:56.263 回答
0

尝试,(虽然没有测试

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)
于 2012-11-16T05:42:23.313 回答
0

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

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

于 2012-11-16T05:42:38.933 回答
0

对于 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>
于 2012-11-16T05:42:40.837 回答
0

我没有对此进行测试,但可以使用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");

如以下知识库文章中所述:

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

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

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

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

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

数据源 = |DataDirectory|\Mydb.sdf

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

  • 对于放在用户计算机文件夹中的应用程序,数据库文件夹使用应用程序文件夹。
  • 对于在 ClickOnce 下运行的应用程序,数据库文件夹使用创建的特定数据文件夹。
于 2012-11-16T06:14:10.373 回答