Pregunta

Se pregunta si voy de este por el camino correcto. Estoy creando una aplicación de C # que las cargas unas pocas variables de mi archivo App.Config.xml. Estoy cargando estos en una clase "config" (Config.cs), junto con otras variables que estoy de carga de una base de datos MySQL. Esto es lo que mi apariencia clase como hasta ahora:

 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"];
    }

Estoy utilizando Config.StationName para tirar de la Config.StationID y Config.StationDescription a partir de una base de datos MySQL como este en DBConnector.cs:

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";
        }
    }

La clase DBConnector.GetStationID funciona bien. Devuelve el valor entero de mi estación. Pero cuando trato de mostrar la Config.StationDescription, se produce una excepción de System.NullReferenceException:. Referencia a objeto no establecida como instancia de un objeto en Namespace.DBConnector.GetStationDescription ()

pensé que ya que yo estaba usando una clase estática para Config.StationName, no tengo para crear una instancia para referirse a ella. Necesito ayuda para entender por qué su lanzar una excepción.

¿Fue útil?

Solución

A mi me parece que podría estar confundiendo qué parte del código tiene el problema. Puesto que usted está diciendo que es GetSTationDescription que lanza, no estoy seguro de por qué suponer entonces StationName tiene un problema?

Me gustaría tener un vistazo a la línea de object result = cmd.ExecuteScalar();, si se pone un punto de interrupción en la línea después de eso, no tiene resultado un valor?

Otra cuestión es que usted está en la actualidad sólo el cierre de la conexión si no una excepción es lanzada, sería más seguro tener el conn.Close(); dentro de una sentencia finally (o utilizar una declaración using por lo que no tiene que preocuparse de cierre IT).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top