【问题标题】:How to change the connection string on another computer?如何更改另一台计算机上的连接字符串?
【发布时间】:2014-09-05 17:01:58
【问题描述】:

我对 SQL 非常陌生,并尝试使用 SQLServer 和 Visual Studio 构建软件。我使用 InstallShield Limited Edition Project 为我的程序创建了一个安装文件。我希望我的程序可以在其他计算机上使用,并且我希望每个用户都能够使用他们自己的计算机上安装的数据库。对我来说,当用户安装程序时,程序会搜索我在创建程序时使用的连接字符串。因此,我认为这个连接字符串必须由用户更改。如何将这些属性添加到我的程序中?顺便说一句,我在我的程序中使用了模型优先实体框架。我在 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。

【问题讨论】:

  • 您可以将连接保存在一个文件中,并在需要时从那里读取它,并且在安装应用程序后,用户可以转到您创建的选项对话框,他可以在其中更改连接字符串和保存到文件中
  • 请参阅InstallShield XML File Changes - Change node attribute on install 以更改 app.config 的连接字符串。
  • @Youness 感谢您的快速回复。正如我所说,我对 C# 和 SQL 很陌生。你能更具体一点吗?例如将连接保存在文件中是什么意思?什么是选项对话框? :(
  • 选项对话框只是一个表单,用户可以键入并选择您必须创建它的选项,如果您愿意,我会全力帮助我将发布如何写入和读取文件
  • @CodeCaster 我想我与 XML 文件无关。我的程序与 Web 无关。

标签: c# sql-server connection-string


【解决方案1】:

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

Data Source=(local)\yourInstanceName

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

【讨论】:

  • 好的。这似乎很合理,但是该程序将如何工作?用户将程序安装到他的计算机中。然后,在连接到服务器时,他会写 (local)\myInstanceName ?另外,我想我必须在程序中添加一个警告,告诉用户使用 myIstanceName。我理解正确吗?
  • 不!如果您使用(本地)并始终安装相同的 SQL Server 实例名称,则所有安装的连接字符串将完全相同。因此,用户无需更改任何内容。 IE。安装程序将为所有安装创建相同的 .config 文件,用户将什么也不做。这样使用(本地)是有利的
  • 很抱歉我是 SQL 新手。 “安装相同的 SQL Server 实例名称”是什么意思?为了能够使用数据库,我猜用户必须连接到他们计算机中的服务器。因此,他们需要 SQL Server 实例名称,我不应该向用户提供此信息吗?
  • 在计算机上安装 SQL Server 时,除非您更改它,否则“安装默认实例”。这意味着您使用服务器名称或本地访问 SQL Server。如果要安装其他 SQL Server,则必须将其安装为“命名实例”,以便用户可以访问它而不会发生冲突。在这种情况下,要访问服务器,您需要指定“服务器名称\实例名称”(或“(本地)\实例名称”)。这样做是为了让多个不同的 SQL Server 并排运行。了解之后,调整您的设置以将 SQL Server 安装为命名实例。
【解决方案2】:

从版本 6 开始的实体框架支持基于代码的配置。参考这篇文章:Code-Based Configuration (EF6 onwards)

【讨论】:

    【解决方案3】:

    不使用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>
    

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

    <configuration>
      <connectionStrings>
         <add name="ConString" connectionString="Data Source=DENISH\SA;Initial Catalog=Demo05-09-2014;User ID=Demo;Password=Demo123" />
      </connectionStrings>
    </configuration>
    

    【讨论】:

      【解决方案4】:

      本地数据库应该是 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 来确定您要更改的设置。希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        不推荐

        只是因为你说你刚刚开始使用 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);
        

        PS : 当你想保存 CNX 字符串时使用 write 就像在该表单的保存按钮中一样。

        【讨论】:

        • 推荐存储连接字符串的地方是应用配置,而不是一些随机的.cfg文件。
        • 我同意,但他说他刚开始使用 c#,我认为这对他来说会更容易
        • 其实我才刚刚开始按照Youness的建议去做:(
        猜你喜欢
        • 2023-02-22
        • 1970-01-01
        • 2015-06-28
        • 2013-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多