【问题标题】:Access to a variable in the app.config from a class C#从类 C# 访问 app.config 中的变量
【发布时间】:2020-04-09 18:29:42
【问题描述】:

我正在使用 C# 处理数据库。 当我尝试从 app.config 中获取一个值来说明项目必须使用哪个数据库时,我的问题就出现了

这就是我正在尝试的:

namespace LanzamientoProyectos.BD
{
    public class ConsultasBD : IDisposable
    {
        private SqlConnection conexionBD;
        Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
        string valEmp = config.AppSettings.Settings["EMPRESA"].Value;

        private const string Empresa = "3";

        public ConsultasBD()
        {
            conexionBD = new SqlConnection(ConfigurationManager.AppSettings["ggConnectionString"]);
        }

但我一直收到接下来的两个错误:

错误1:非静态字段、方法或属性需要对象引用

错误 2:字段初始化器不能引用非静态字段、方法或属性

如何在这个类的 app.config 中访问这个变量?

提前致谢!

【问题讨论】:

  • 您是否尝试过 Google 那些错误消息?这里有很多答案会有所帮助。
  • 当然可以,但是我已经尝试了所有我看到的东西,但我找不到解决方案。
  • 为什么不将连接字符串存储在应该存储的位置?
  • 如果要将连接字符串存放在app.config中,建议可以在当前项目中设置app.config,而不是其他地方。

标签: c# database visual-studio app-config


【解决方案1】:

问题出在这两行:

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
string valEmp = config.AppSettings.Settings["EMPRESA"].Value;

C# 不允许您以这种方式引用其他字段(在这种情况下为config)。如果要访问config,则必须在构造函数或任何其他方法中进行。

也许看看这里的文档会有所帮助:Compiler Error CS0236

如果您尝试在方法外初始化变量,请考虑在类构造函数内执行初始化。

【讨论】:

    【解决方案2】:

    在构造函数内部进行初始化:

    public class ConsultasBD : IDisposable
    {
        private SqlConnection conexionBD{get;set;};
        Configuration config = null; 
        string valEmp = String.Empty;
        private const string Empresa = "3";
    
        public ConsultasBD()
        {
            config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
            valEmp  = config.AppSettings.Settings["EMPRESA"];
            conexionBD = new SqlConnection(config.AppSettings["ggConnectionString"]);
        }
    }
    

    【讨论】:

      【解决方案3】:

      如何在这个类的 app.config 中访问这个变量?

      您在示例的第二个用法中正确。

      像这样访问值:

      string valEmp = System.Configuration.ConfigurationManager.AppSettings["EMPRESA"];
      

      【讨论】:

        【解决方案4】:

        假设您将连接字符串存储在应该存储的位置:

        <configuration>
            <connectionStrings>
                <add name="EMPRESA" connectionString="Data Source=.;Initial Catalog=EMPRESA;Integrated Security=True"providerName="System.Data.SqlClient" />
            </connectionStrings>
        </configuration>
        

        然后你可以这样访问它:

        var connection = System.Configuration.ConfigurationManager
            .ConnectionStrings["EMPRESA"].ConnectionString;
        

        【讨论】:

          猜你喜欢
          • 2016-05-02
          • 2016-10-25
          • 1970-01-01
          • 2014-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-11
          • 1970-01-01
          相关资源
          最近更新 更多