【问题标题】:What is the best method to handle connection string in windows form application?在 Windows 窗体应用程序中处理连接字符串的最佳方法是什么?
【发布时间】:2013-03-25 21:25:16
【问题描述】:

我的 C# 应用程序使用 DataSetTableAdapters。它们是由 VS2008 GUI Tool 生成的。

例子:

右键项目->添加新项->数据集

此方法自动将连接字符串添加到app.config

但这是连接字符串的硬线方法。我想以一种简单的方式更改连接字符串。但是当我使用数据集时,连接字符串会从应用程序属性中获取。 这种情况有什么解决办法吗?

这是我在 Settings.Designer.cs 文件中存储的连接字符串

    namespace WindowsFormsApplication2.Properties {


    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {

        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

        public static Settings Default {
            get {
                return defaultInstance;
            }
        }

        [global::System.Configuration.ApplicationScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=SLCERT\\SQLEMK;Initial Catalog=TestDataBase;Integrated Security=True")]
        public string TestDataBaseConnectionString {
            get {
                return ((string)(this["TestDataBaseConnectionString"])); // this is the connection string get from the dataset's
            }
        }
    }
}

app.config 包含

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="WindowsFormsApplication2.Properties.Settings.TestDataBaseConnectionString"
            connectionString="Data Source=SLCERT\SQLEMK;Initial Catalog=TestDataBase;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

【问题讨论】:

标签: c# sql-server app-config


【解决方案1】:

我相信您会问这个问题,这样您就不必在本地测试和生产/测试服务器之间手动切换。

你可能想看看How to: Transform Web.config When Deploying a Web Application Project

这是关于 web.config 而不是 app.config 但它是相同的想法。

ps。仅适用于 VS 2010 及更高版本

【讨论】:

【解决方案2】:

除了 JP Hellemons 提供的进行配置转换的建议之外,您还可以做其他事情,因为只有 .NET 4.0 (本机)支持。您可以将任意数量的连接字符串添加到配置文件的&lt;connectionStrings/&gt; 部分,因此添加“DebugConnectionString”和“ReleaseConnectionString”或类似内容。

现在,为了在每次更改环境时无需干预即可使用它们,您可以使用跟踪常量。假设在 Visual Studio 中的本地,您正在使用 DEBUG 常量集进行编译,而在部署发布时它不存在,那么您可以执行以下操作:

#if DEBUG 
    return ConfigurationManager.ConnectionStrings["DebugConnectionString"];
#else
    return ConfigurationManager.ConnectionStrings["ReleaseConnectionString"];
#endif

【讨论】:

  • 这个方法OK,但是当我使用DataSet的时候,每次发布前我都想重新配置。(DataSet是由vs2008 GUI工具生成的,然后它会自动将连接字符串添加到settings.cs中文件)
【解决方案3】:

在 app.config 中

<configuration>
<configSections>
</configSections>
<connectionStrings>
    <add name="DBCS" connectionString="Data Source=|DataDirectory|\Database.sdf;password=Password" 
        providerName="Microsoft.SqlServerCe.Client.3.5" /> 
</connectionStrings>

并像这样访问它

static string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString.ToString();

包括

System.Configuration;

命名空间

【讨论】:

  • 这对于一般建议来说是可以的。但是当我使用DataSet时(使用GUI工具的数据集,VS通过设置文件自动添加连接字符串。我想替换那部分)
  • 如果你想在 app.config 中使用连接字符串。创建一个类,从数据库中获取数据并将其存储在类中并调用该类来填充控件,如datagridview。
猜你喜欢
  • 1970-01-01
  • 2013-01-27
  • 2015-09-16
  • 2017-01-14
  • 2020-05-03
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多