C#应用程序上下文用法

C#应用程序上下文用法,c#,mysql,database-connection,C#,Mysql,Database Connection,抱歉,如果我的术语不正确,我是C#的新手。我正在尝试使用ApplicationContext文件来存储mysql conn值,如dbname、username、password。带有mysql conn字符串的类正在“使用”ApplicationContext的名称空间,但当我打印出连接字符串时,这些值正在生成它 一位朋友说,“我没有初始化它”,但不能留下来详细说明“它”是什么 ApplicationContext.cs中的“Console.WriteLine(“1”);”永远不会出现。我是否需

抱歉,如果我的术语不正确,我是C#的新手。我正在尝试使用ApplicationContext文件来存储mysql conn值,如dbname、username、password。带有mysql conn字符串的类正在“使用”ApplicationContext的名称空间,但当我打印出连接字符串时,这些值正在生成它

一位朋友说,“我没有初始化它”,但不能留下来详细说明“它”是什么

ApplicationContext.cs中的“Console.WriteLine(“1”);”永远不会出现。我是否需要创建ApplicationContext对象并对该对象调用Initialize()

谢谢你的帮助

ApplicationContext.cs:

namespace NewApplication.Context
{
    class ApplicationContext
    {
        public static string serverName;
        public static string username;
        public static string password;

        public static void Initialize()
        {
            //need to read through config here

            try
            {

                Console.WriteLine("1");
                XmlDocument xDoc = new XmlDocument();
                xDoc.Load(".\\Settings.xml");
                XmlNodeList serverNodeList = xDoc.GetElementsByTagName("DatabaseServer");
                XmlNodeList usernameNodeList = xDoc.GetElementsByTagName("UserName");
                XmlNodeList passwordNodeList = xDoc.GetElementsByTagName("Password");

            }
            catch (Exception ex)
            {
                // MessageBox.Show(ex.ToString());
                //TODO: Future write to log file
                username = "user";
                password = "password";
                serverName = "localhost";
            }
        }
    }
}
MySQLManager.cs: 注意:dbname与您将在代码中看到的用户名相同,我是从一个这样做的朋友那里复制的

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;
using NewApplication.Context;


namespace NewApplication.DAO
{
    class MySQLManager
    {
        private static MySqlConnection conn;
        public static MySqlConnection getConnection()
        {
            if (conn == null || conn.State == System.Data.ConnectionState.Closed)
            {
                string connStr = "server=" + ApplicationContext.serverName +
                    ";user=" + ApplicationContext.username + ";database=" + ApplicationContext.username + ";port=3306;password=" +
                    ApplicationContext.password + ";";
                conn = new MySqlConnection(connStr);
                try
                {
                    Console.WriteLine("Connecting to MySQL... ");
                    Console.WriteLine("Connection string:  " + connStr + "\n");
                    conn.Open();
                    // Perform databse operations


                    // conn.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
            return conn;
        }
    }
}
感谢您继续阅读,这是使用前面两个文件的代码:

class LogDAO
{
    MySqlConnection conn;

    public LogDAO()
    {
        conn = MySQLManager.getConnection();
}
谢谢,,
rd42

忽略.NET中已经有一组非常丰富的配置类,包括支持加密的配置类,您确实需要将其作为点调用Application.Initialize()来填充it字段

我应该提到,这看起来像是一个单例的实现。你可能想读乔恩·斯基特的《单身汉》,因为可能有些事情你需要注意。例如,如果两个线程调用ApplicationContext.Initialize(),会发生什么?对ApplicationContext.Initialize()的多次调用是否合理


此外,公共字段可能是一个坏主意,尤其是当您有可用字段时

已经有一个ApplicationContext类。。。那你想用你的钱做什么?谢谢,我会调查的。谢谢你提供的信息。我正在继承一个项目,他们昨天想要更改,我是C语言的新手。我将查看链接,并感谢Application.Initialize()提示。