我将Access数据库(accdb)与C#-windows应用程序项目连接。“ accdb”数据库位于桌面的文件夹中。它可以在我的计算机上正常工作,但是当我生成安装文件并将其安装在另一台计算机上时,该软件无法正常工作。 (我知道问题是数据库位于该文件夹中),但是我不知道如何更改在其他计算机上安装后仍可以连接到数据库的代码。有人知道我该如何解决这个问题?
这是我写的简单连接:
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\aa\Test.accdb;Jet OLEDB:Database Password=123;");
它在我的计算机上可以正常工作,但是当我建立安装文件并将其安装在另一台计算机上时,该软件无法正常工作。
主要原因是因为该路径在另一台计算机上不存在;您已经对路径进行了硬编码。
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\aa\Test.accdb;Jet OLEDB:Database Password=123;");
C:\Users\aa\Test.accdb
这是实际的问题,您不应该硬编码该值,相反,您可以想到两个选择。
您可以选择使用上面提到的一个或两个,或者同时做两个。下面是一个使用上面选项一的简单示例。
using System.Reflection;
using System.IO;
public static string GetDBConnection()
{
try
{
string dbExecPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Test.accdb");
return $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={ dbExecPath };Jet OLEDB:Database Password=123;";
}
catch (Exception)
{
return string.Empty;
}
}
这是程序集的位置(路径),并将其与您的文件名(db文件)结合在一起。然后将其与您的其他连接字符串部分合并,然后返回整个连接字符串。
[请注意:如果使用此路由,必须使用的命名空间和db文件必须与exe位于同一目录。
现在您可以这样称呼它:
OleDbConnection con = new OleDbConnection(GetDBConnection());
您可能想将GetDBConnection()
分配给一个变量,并在建立连接之前检查它是否为空,它可能为空。