1

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

 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 使用了一个静态类,所以我不必创建一个实例来引用它。我需要帮助来理解为什么它会抛出异常。

4

1 回答 1

1

在我看来,您可能混淆了代码的哪一部分有问题。既然您说这GetSTationDescription是抛出问题,我不确定您为什么认为StationName有问题?

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

另一个问题是,如果没有抛出异常,您当前仅关闭连接,在语句conn.Close();内部finally(或使用using语句,这样您就不必担心关闭它)会更安全。

于 2010-08-09T15:21:09.100 回答