C# 我已将c windows应用程序与Access数据库(accdb)连接,但该应用程序无法在其他计算机上运行
我将Access数据库accdb与C-windows应用程序项目连接。 accdb数据库位于桌面的文件夹中。它在我的计算机上正常工作,但当我构建安装文件并将其安装到其他计算机上时,该软件无法工作。我知道问题是数据库位于文件夹中,但我不知道如何更改代码,在其他计算机上安装后,它仍然可以连接到数据库。 有人知道我该如何解决这个问题吗? 以下是我写的简单连接:C# 我已将c windows应用程序与Access数据库(accdb)连接,但该应用程序无法在其他计算机上运行,c#,database,ms-access,database-connection,C#,Database,Ms Access,Database Connection,我将Access数据库accdb与C-windows应用程序项目连接。 accdb数据库位于桌面的文件夹中。它在我的计算机上正常工作,但当我构建安装文件并将其安装到其他计算机上时,该软件无法工作。我知道问题是数据库位于文件夹中,但我不知道如何更改代码,在其他计算机上安装后,它仍然可以连接到数据库。 有人知道我该如何解决这个问题吗? 以下是我写的简单连接: OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLED
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这是实际问题,您不应该硬编码此值,相反,我可以想到两个选项
在执行该文件的应用程序旁边查找该文件。这要求该文件位于exe所在的同一目录中。
您可以允许最终用户输入该文件的位置,如果该文件存在,请保存此路径以在需要时再次使用。
你可以使用上面提到的任何一种方法,也可以同时使用这两种方法,这是你的选择。下面是一个使用上述选项1的简单示例
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 file组合。然后将其与其他连接字符串部分合并,返回整个连接字符串
请注意:必须使用的名称空间和db文件必须与exe位于同一目录中(如果执行此路径)
现在你可以这样称呼它:
OleDbConnection con = new OleDbConnection(GetDBConnection());
您可能希望将GetDBConnection分配给var,并在构建连接之前检查它是否为空,它可能为空。在其他计算机中,您是否具有相同的数据库访问权限?同名?相同的文件夹路径?两个选项,要么让用户指向数据库,要么它应该位于应用程序目录的旁边,并更改您的连接字符串以反映这一点,您不能像这样硬编码。@đěxě341;:Tnx。如何更改连接字符串以反映这一点?你能写下来吗?@Alex TinLe:Tnx。没有,在另一台电脑上,我没有。我需要更改这个硬代码,但我不知道如何更改:谢谢您的伟大代码。我现在修改了我的代码,正如我的主要问题中所述。现在它在另一台计算机上打开,但当我想按“插入”按钮在我的数据库中插入数据时,它会显示一个错误,即它无法将数据插入数据库。你能帮我解决最后一个问题吗?谢谢。@arash6657如果它回答了您的问题,请将答案标记为已接受,以便让其他人知道我的解决方案可能有相同的问题。如果您有不同的问题,请创建一个新问题。亲爱的đěxěŕ,我将其标记为绿色作为答案,但由于这是我仍然存在的主要问题的继续,您能在这个问题上帮助我吗?谢谢。这不是您报告的问题,您需要用新问题创建另一个与此无关的问题。创建一个新问题,包括所有相关代码、重现问题的步骤以及您尝试过的内容,以便每个人都能提供帮助。