更改ConnectionString

时间:2012-05-15 14:05:04

标签: c# winforms deployment connection-string application-settings

当我将myProg.exe安装到客户端计算机时,我必须调整connectionString。

所以我打开文件MyProg.exe.config,并修改了connectionString,但它不起作用。

然后我找到了article。现在当我将访问权限修改为公共时,我无法编译/部署它。

我的App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>

    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="FrontEnd_Offline.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <system.windows.forms jitDebugging="true" />
  <connectionStrings>
    <add name="Soft8Exp_ClientConnStr" connectionString="Data Source=xxxxx;Initial Catalog=xxxxx;User ID=sa;Password=xxxxx" providerName="System.Data.SqlClient" />
    <add name="Soft8Exp_ClientEntities" connectionString="metadata=res://*/Domain.Entite_T.csdl|res://*/Domain.Entite_T.ssdl|res://*/Domain.Entite_T.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xxxxx;initial catalog=xxxxx;user id=sa;password=xxxxx;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    <add name="FrontEnd_Offline.Properties.Settings.Soft8Exp_ClientConnectionString" connectionString="Data Source=xxxxx;Initial Catalog=xxxxx;User ID=sa;Password=xxxxx" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <applicationSettings>
    <FrontEnd_Offline.Properties.Settings>
      <setting name="NO_ORDRE" serializeAs="String">
        <value />
      </setting>
    </FrontEnd_Offline.Properties.Settings>
  </applicationSettings>
</configuration>

和要连接的课程:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

using System.Data;
using System.Configuration;

namespace FrontEnd_Offline.Domain
{
    class Connexion : IDisposable 
    {
        public SqlConnection conn;
        public SqlConnection GetConnected()
        {
            try
            {
                String strConnectionString = ConfigurationManager.ConnectionStrings["Soft8Exp_ClientConnStr"].ConnectionString;
                conn = new SqlConnection(strConnectionString);
            }
            catch (Exception excThrown)
            {
                conn = null;
                throw new Exception(excThrown.InnerException.Message, excThrown);
            }

            // Ouverture et restitution de la connexion en cours
            if (conn.State == ConnectionState.Closed) conn.Open();
            return conn;
        }

        public Boolean IsConnected
        {
            get { return (conn != null) && (conn.State != ConnectionState.Closed) && (conn.State != ConnectionState.Broken); }
        }

        public void CloseConnection()
        {
            // Libération de la connexion si elle existe
            if (IsConnected)
            {
                conn.Close();
                conn = null;

            }

        }

        public void Dispose()
        {
            CloseConnection();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您没有说您在开始时使用的是ClickOnce。情况有所不同:配置文件存储在用户的配置文件中。您无法更改文件(仅通过应用程序进行用户设置)。

要使用新的连接字符串更新ClickOnce程序,我建议如下:

  1. 创建一个名为“SettingsUpgradeNeeded”的新用户设置,并在设置设计器中将其设置为true
  2. 将以下代码添加到应用程序的启动代码(Program.cs或App.cs)

    if (Properties.Settings.Default.SettingsUpgradeNeeded)
    {
        Properties.Settings.Default.Upgrade();
        Properties.Settings.Default.SettingsUpgradeNeeded = false;
        Properties.Settings.Default.Save();
    }
    
  3. 发布新的更新。

  4. 更改连接的另一种方法是(如果您在代码中仅使用SqlConnection,则更为可取):

    1. 停止使用ConnectionStrings部分
    2. 对于每个连接参数,创建一个设置(例如:数据库服务器,数据库名称等)
    3. 使用SqlConnectionStringBuilder从这些设置
    4. 生成连接字符串

      修改
      您希望用户能够更改连接参数:

      1. 为连接数据库所需的每个参数创建用户设置(例如:服务器,数据库,故障转移伙伴,用户名,身份验证方法等)
      2. 创建一个对话框,您可以在其中配置这些值
      3. 使用SqlConnectionStringBuilder从这些值
      4. 创建连接字符串
      5. 对所有数据库连接使用该连接字符串
      6. 示例:

        SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder();
        sb.DataSource = Properties.Settings.Default.DBServerName;
        sb.InitialCatalog = Properties.Settings.Default.DBDatabaseName;
        sb.IntegratedSecurity = Properties.Settings.Default.DBUseIntegratedSecurity;
        if (!sb.IntegratedSecurity)
        {
            sb.UserId = Properties.Settings.Default.DBUserName;
            sb.Password = Properties.Settings.Default.DBPassword;
        }
        
        
        using (SqlConnection conn = new SqlConnect(sb.ConnectionString))
        {
            ...
        }
        

        我会在Program.cs或App类中生成一个静态属性,该类可以从SqlConnectionStringBuilder返回连接字符串。

答案 1 :(得分:-1)

你的意思是你的数据库的connectionString?如果是这样,则应在数据库连接类中更改它。 如果您的数据库也存储在本地,则本地设备上的connectionString应该与普通路径类似。 像这样:

"C:\\Some_location\\database.extension"

扩展名取决于您使用的数据库类型,请将此字符串更改为数据库的位置。