首页 > 解决方案 > 在类库中哪里声明 ConfigurationManger?

问题描述

我在 vs2017 中用 C# 语言开发一个 Windows 窗体应用程序。我有一个本地 SQL 数据库,我从不同的 winform 访问了很多。我想创建一个静态类库,其中包含用于读取或向数据库添加数据的静态方法,只是为了使我的程序简洁易读。

通常,我ConfigurationManger在 winform中声明我的initializeComponent(),但是在我的类库中,如果我在我的类中声明它,我会收到错误,我只能在我的方法中声明它,但这意味着我必须在我的所有方法中声明它我认为这不是正确的做法。

所以,我在问最好的方法是什么?

这是我的声明:

connectionstring = ConfigurationManager.ConnectionStrings["GTC_Frater_Razes.Properties.Settings.db_alarmeConnectionString"].ConnectionString;

它提供以下错误消息

“当前上下文中不存在 ConfigurationManger.ConnectionStrings”

标签: c#winformsclass-libraryconfigurationmanager

解决方案


所以假设在你的类库中你有类,DataProvider

public class DataProvider
{
    private static string m_connectionString;

    public static void SetConnectionString()
    {
        //Or you can use your conventional way to get connection string, but as you can see this call will be one time only, It will help you.
        m_connectionString = ConfigurationSettings.AppSettings["connString"]; 
    }

    public static DataTable GetDataFromDataBase(string query)
    {
        DataTable tbl = new DataTable();
        using (MySqlConnection conn = new MySqlConnection(m_connectionString))
        {
             MySqlCommand cmd = new MySqlCommand(query, conn);
             MySqlDataAdapter da = new MySqlDataAdapter(cmd);
             DataTable dt = new DataTable();
             da.Fill(tbl);
        }
        return tbl;
    }
}

DataProvider 的静态方法SetConnectionString()应该在软件运行的早期调用,最好在启动时调用。静态方法GetDataFromDataBase()将接受查询并返回包含数据库数据的数据表。

因此(在一般 winform 情况下),文件中的静态类ProgramProgram.cs如下所示,

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            DataProvider.SetConnectionString();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }

在您的 App.config 中,您应该有一个标签

<configuration>
  <appSettings>
    <add key="connString" value="server=<serverIP>;user id=<user>;database=<databaseName>;pooling=true" />
  </appSettings>
</configuration>

推荐阅读