在C#.NET中创建安装文件后更改连接字符串

我正在创建一个C#windows表单应用程序,工作可以概括为用户填写某些表单并将数据保存在Access数据库中。 现在我遇到的问题是我必须将此作为设置文件提供给某人。 我想的是,一旦安装在其他计算机上并执行的代码将因为Access数据库的连接字符串而产生错误,因为它与该计算机不匹配。 我知道如果分发项目我可以在app.config中放置连接字符串,并且每个用户都可以根据他/她的机器更改它。 但正如我给出一个安装文件如何解决这个问题。

假设您使用此连接字符串部署app.config

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\yourFile.accdb;" 

在WinForms应用程序中|DataDirectory| 快捷方式表示应用程序工作文件夹,但您可以在运行时更改它指向使用此代码的位置。

 // appdomain setup information AppDomain currentDomain = AppDomain.CurrentDomain; //Create or update a value pair for the appdomain currentDomain.SetData("DataDirectory", "Your user choosen path"); 

它消除了对完整路径进行硬编码的需要,您已经发现,这会导致在安装过程中解决几个问题。 当然,您的设置应该在用户选择的路径中提供您的数据库。

您可以通过SqlConnectionStringBuilder在运行时构建ConnectionString

 // Create a new SqlConnectionStringBuilder and // initialize it with a few name/value pairs. SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(GetConnectionString()); // The input connection string used the // Server key, but the new connection string uses // the well-known Data Source key instead. Console.WriteLine(builder.ConnectionString); // Pass the SqlConnectionStringBuilder an existing // connection string, and you can retrieve and // modify any of the elements. builder.ConnectionString = "server=(local);user id=ab;" + "password= a!Pass113;initial catalog=AdventureWorks"; // Now that the connection string has been parsed, // you can work with individual items. Console.WriteLine(builder.Password); builder.Password = "new@1Password"; builder.AsynchronousProcessing = true; // You can refer to connection keys using strings, // as well. When you use this technique (the default // Item property in Visual Basic, or the indexer in C#), // you can specify any synonym for the connection string key // name. builder["Server"] = "."; builder["Connect Timeout"] = 1000; builder["Trusted_Connection"] = true; Console.WriteLine(builder.ConnectionString); Console.WriteLine("Press Enter to finish."); Console.ReadLine(); 

编辑:您可以使用此方法: 在网络上查找SQL Server

我以前遇到过这个问题。 我以这种方式解决它。
(1)在你的app.config文件中,在连接字符串中放置一个占位符。 连接字符串将包含访问db文件的文件路径。 用特殊字符串替换路径。

       

(2)当您的应用程序启动时,使用Directory.GetCurrentDirectory来获取应用程序路径。 在创建连接之前,将## path ##替换为客户端计算机上的实际路径。

 static void test() { string s = ConfigurationManager.ConnectionStrings["test"].ConnectionString; s.Replace("##path##", Directory.GetCurrentDirectory()); OleDbConnection conn = new OleDbConnection(s); } 

如果部署应用程序以及SQLLocalDB,则应在数据库中添加用户(machine \ user)以进行访问。