Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我已将c windows应用程序与Access数据库(accdb)连接,但该应用程序无法在其他计算机上运行_C#_Database_Ms Access_Database Connection - Fatal编程技术网

C# 我已将c windows应用程序与Access数据库(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

我将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这是实际问题,您不应该硬编码此值,相反,我可以想到两个选项

在执行该文件的应用程序旁边查找该文件。这要求该文件位于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ěŕ,我将其标记为绿色作为答案,但由于这是我仍然存在的主要问题的继续,您能在这个问题上帮助我吗?谢谢。这不是您报告的问题,您需要用新问题创建另一个与此无关的问题。创建一个新问题,包括所有相关代码、重现问题的步骤以及您尝试过的内容,以便每个人都能提供帮助。