access数据库和c#之间的连接
Posted
技术标签:
【中文标题】access数据库和c#之间的连接【英文标题】:Connectivity between access database and 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 数据库文件尝试此操作,但它没有运行可能是这种情况下必须使用完整路径。我说的对吗?
【问题讨论】:
【参考方案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(数据库文件夹)下运行的应用程序 使用创建的特定数据文件夹。
【讨论】:
以上是关于access数据库和c#之间的连接的主要内容,如果未能解决你的问题,请参考以下文章
我的连接 C# 有问题 - Microsoft Access 2010
如何使用 C# 在 access 数据库中实现“右外连接”查询?
如何在 C# 中更新或刷新与 Ms-access 连接的数据网格视图