存储配置值

时间:2010-08-09 15:07:11

标签: c# mysql-connector

想知道我是否正确行事。我正在创建一个C#应用程序,它从我的App.Config.xml文件加载一些变量。我将这些加载到“config”类(Config.cs)以及我从MySQL数据库加载的其他变量。这是我班级到目前为止的样子:

 class Config
    {
        public static string ServerHostname = ConfigurationManager.AppSettings["ServerHostname"];
        public static string SoftwareVersion = "v0.1a";
        public static int StationID = DBConnector.GetStationID();
        public static string StationDescription = DBConnector.GetStationDescription();
        public static string StationName = ConfigurationManager.AppSettings["StationName"];
    }

我正在使用Config.StationName从DBConnector.cs中的MySQL数据库中提取Config.StationID和Config.StationDescription:

public static int GetStationID()
    {
        try
        {
            MySqlConnection conn = new MySqlConnection(connStr);
            conn.Open();
            string sql = "select station_id from station_master where station_name = @station_name limit 1";
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            cmd.Parameters.AddWithValue("@station_name", Config.StationName);
            object result = cmd.ExecuteScalar();
            conn.Close();
            return Convert.ToInt32(result);
        }
        catch (Exception ex)
        {
            ErrorConnection += ex.ToString();
            return 0;
        }
    }
    public static string GetStationDescription()
    {
        try
        {
            MySqlConnection conn = new MySqlConnection(connStr);
            conn.Open();
            string sql = "select station_description from station_master where station_id = '" + Config.StationID +"' limit 1";
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            // cmd.Parameters.AddWithValue("@station_name", Config.StationName.ToString());
            object result = cmd.ExecuteScalar();
            conn.Close();
            MessageBox.Show(sql);
            return (result.ToString());
        }
        catch (Exception ex)
        {
            ErrorGenericDBException += ex.ToString();
            MessageBox.Show(ErrorGenericDBException);
            return "Error";
        }
    }

DBConnector.GetStationID类工作正常。它返回我的工作站的int值。但是当我尝试显示Config.StationDescription时,它会抛出System.NullReferenceException异常:对象引用未设置为Namespace.DBConnector.GetStationDescription()中的对象实例。

我认为,因为我使用的是Config.StationName的静态类,所以我不必创建一个实例来引用它。我需要帮助才能理解为什么抛出异常。

1 个答案:

答案 0 :(得分:1)

对我来说,看起来你可能会混淆代码的哪一部分存在问题。既然你说它是GetSTationDescription引发的,我不确定你为什么假设StationName有问题?

我会看一下object result = cmd.ExecuteScalar();行,如果你在那之后在行上放一个断点,结果是否有值?

另一个问题是,如果没有抛出异常,您当前只关闭连接,在conn.Close();语句中使用finally会更安全(或使用using }声明所以你不必担心关闭它。)