C# 如何更改另一台计算机上的连接字符串?

C# 如何更改另一台计算机上的连接字符串?,c#,sql-server,connection-string,C#,Sql Server,Connection String,我对SQL非常陌生,并尝试使用SQLServer和VisualStudio构建一个软件。我使用InstallShield限量版项目为我的程序创建了一个安装文件。我希望我的程序能在其他计算机上使用,我希望每个用户都能使用安装在他们计算机上的自己的数据库。对我来说,当用户安装程序时,程序将搜索我在创建程序时使用的连接字符串。因此,我认为用户必须更改此连接字符串。如何将这些属性添加到程序中?顺便说一下,我在程序中使用了模型优先实体框架。我在app.config中写入的连接字符串是: <conne

我对SQL非常陌生,并尝试使用SQLServer和VisualStudio构建一个软件。我使用InstallShield限量版项目为我的程序创建了一个安装文件。我希望我的程序能在其他计算机上使用,我希望每个用户都能使用安装在他们计算机上的自己的数据库。对我来说,当用户安装程序时,程序将搜索我在创建程序时使用的连接字符串。因此,我认为用户必须更改此连接字符串。如何将这些属性添加到程序中?顺便说一下,我在程序中使用了模型优先实体框架。我在app.config中写入的连接字符串是:

<connectionStrings>
    <add name="otobusVTNesneleri" connectionString="metadata=res://*/OtobusVeriModeli.csdl|res://*/OtobusVeriModeli.ssdl|res://*/OtobusVeriModeli.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=PIPASO\PIPASOSERVER;initial catalog=otobus;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>


另外,我在互联网上搜索了这个问题,发现有人建议我使用SQL Server compact。我想不用它来解决这个问题。我有SQL Server 2012

您应该在所有PC中安装具有相同实例名称的SQL Server。然后,在连接字符串中,使用“本地”语法,而不是指定计算机名称:

让用户更改连接字符串不是一个好主意。

不建议重新命名 只是因为你说你才刚开始学c#

因此要将连接字符串写入文件:

using System.IO;//delcare it the top
File.Write("config.cfg","your connection string goes here");
从中阅读:

using System.IO;//delcare it the top
string CNXSTRING = File.Read("config.cfg");
顺便说一句,你必须创建一个表单,用户可以在其中键入新的连接字符串,比如说它有一个名为
txtstring
的文本框,代码将变为

File.Write("config.cfg",txtstring.Text);

注:当您想保存CNX字符串时,如该表单的“保存”按钮中所示,请使用“写入”。

本地数据库应为sql compact(sdf文件)。在任何情况下,您需要做的是让安装程序在部署app.config文件后修改它。这就是我在当前项目中所做的。在我当前的项目中,我有一个本地数据库(一个sdf文件)和一个安装程序(使用WiX创建)来部署我的应用程序。我将安装程序配置为在部署应用程序后修改一些app.config设置。其中一个设置是与本地sdf数据库的连接

需要注意的一点是,在使用sdf文件时,不能在配置文件中指定相对文件路径。您需要指定完整路径(即:d:\..\db.sdf)或使用特殊文件夹名称(即| AppData | db.sdf)。AppData将解析为可执行文件的当前路径

在客户机上需要完整的sql数据库也意味着您必须在客户机上安装sql Express。您不必对sdf文件执行此操作

如果您决定使用WiX,您可以修改您的连接字符串,如下所示

<util:XmlFile Id="WindowsServiceUpdateConnectionString" File="[INSTALLFOLDER]$(var.Phoenix.WindowsService.TargetFileName).config" Action="setValue"
ElementPath= "//configuration/connectionStrings/add[\[]@name=&quot;PhoenixCacheEntities&quot;[\]]/@connectionString"
Value="Data Source=[INSTALLFOLDER]Cache\PhoenixLocal.sdf"/>


您可以看到,这里使用xpath来确定要更改的设置。希望这有帮助。

不使用sql server用户名密码,请使用它

<configuration>
  <connectionStrings>
     <add name="ConString" connectionString="Data Source=Trainee4-PC;Initial Catalog=Demo05-09-2014;Integrated Security=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>
<configuration>
  <connectionStrings>
     <add name="ConString" connectionString="Data Source=DENISH\SA;Initial Catalog=Demo05-09-2014;User ID=Demo;Password=Demo123" />
  </connectionStrings>
</configuration>

使用sql server用户名密码使用它

<configuration>
  <connectionStrings>
     <add name="ConString" connectionString="Data Source=Trainee4-PC;Initial Catalog=Demo05-09-2014;Integrated Security=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>
<configuration>
  <connectionStrings>
     <add name="ConString" connectionString="Data Source=DENISH\SA;Initial Catalog=Demo05-09-2014;User ID=Demo;Password=Demo123" />
  </connectionStrings>
</configuration>


从版本6开始的实体框架支持基于代码的配置。请参阅本文:

您可以将连接保存在文件中,并在需要时从文件中读取连接。安装应用程序后,用户可以转到您创建的选项对话框,在该对话框中,用户可以更改连接字符串并将其保存到文件中,以更改app.config的连接字符串。@Youness感谢您的快速响应。正如我所说,我对C#和SQL非常陌生。你能说得更具体些吗?e、 g.将连接保存在文件中是什么意思?什么是选项对话框(选项对话框只是一个表单,用户可以键入并选择您必须创建的选项。如果您需要,我将提供完整帮助。我将发布如何编写和读取表单。)file@CodeCaster我想我与XML文件无关。我的程序与Web无关。建议存储连接字符串的位置是应用程序配置,而不是一些随机的
.cfg
文件。我同意,但他说他刚开始使用c语言,我想这对他来说会更容易。事实上,我刚刚开始做Youness建议的事情:(好的。这似乎是可重新设置的,但过程如何工作?用户将把程序安装到他的计算机中。然后,在连接到服务器时,他将编写(本地的)\myInstanceName?此外,我想我必须在程序中添加一个警告,告诉用户使用myInstanceName。我理解正确吗?不!如果使用(本地),并始终安装相同的SQL Server实例名称,则所有安装的连接字符串都将完全相同。因此,用户无需更改任何内容。即,安装程序将为所有安装创建相同的.config文件,而用户将不执行任何操作。这是使用(本地)的方式很抱歉,我是SQL新手。您说“安装相同的SQL Server实例名称”是什么意思?为了能够使用数据库,我猜用户必须连接到其计算机中的服务器。因此,他们需要SQL server实例名称,我不应该向用户提供此信息吗?在计算机中安装SQL server时,除非您进行更改,“默认实例已安装”。这意味着您使用服务器名称或本地访问SQL Server。如果要安装其他SQL Server,则必须将其安装为“命名实例”,以便用户可以无冲突地访问它。在这种情况下,要访问服务器,您需要指定“服务器名称\实例名称”(或“(本地)\instance name”)。这样做是为了允许多个不同的SQL Server并排运行。一旦知道,请调整设置以将SQL Server作为命名实例安装。