none
Cómo corregir lo siguiente RRS feed

  • Pregunta

  • Tengo este método estático que como ustedes saben no me permite instanciar objetos, mi código es este:

    public static Registros ObtenerRegistros(Int64 pId)
            {
                using (SqlConnection Conexion = ConexionServidor.ObtenerConexion())
                {
                    Registros pRegistro = new Registros();
                    SqlCommand comando = new SqlCommand(string.Format(
                        "Select Id, TipoDocumento, Documento, LugarExpedicion, Nombres,  Apellidos, Genero, FechaIngreso, FechaRetiro, FechaActualizacion, Carpeta, FechaReingreso, FechaSalidaReingreso, Observaciones from Registros where Id={0}", pId), Conexion);
                   
                    SqlDataReader reader = comando.ExecuteReader();

                    for (int i = 0; i < DatosCuadroVista.RowCount; i++)
                    {
                        for (int j = 0; j < DatosCuadroVista.ColumnCount; j++)
                        {
                            if (DatosCuadroVista.Rows[i].Cells[j].Value == DBNull.Value)
                            {
                                DatosCuadroVista.Rows[i].Cells[j].Value = "null";
                            }
                        }
                    }
                    DatosCuadroVista.Update();

                    while (reader.Read())
                    {
                        pRegistro.Id = reader.GetInt64(0);
                        pRegistro.TipoDocumento = reader.GetString(1);
                        pRegistro.Documento = reader.GetString(2);
                        pRegistro.LugarExpedicion = reader.GetString(3);
                        pRegistro.Nombres = reader.GetString(4);
                        pRegistro.Apellidos = reader.GetString(5);
                        pRegistro.Genero = reader.GetString(6);
                        pRegistro.FechaIngreso = Convert.ToString(reader.GetDateTime(7));
                        pRegistro.FechaRetiro = Convert.ToString(reader.GetDateTime(8));
                        pRegistro.FechaActualizacion = Convert.ToString(reader.GetDateTime(9));
                        pRegistro.Carpeta = reader.GetString(10);
                        pRegistro.FechaReingreso = Convert.ToString(reader.GetDateTime(11));
                        pRegistro.FechaSalidaReingreso = Convert.ToString(reader.GetDateTime(12));
                        pRegistro.Observaciones = reader.GetString(13);

                    }
                    Conexion.Close();
                    return pRegistro;
                }
            }

    Cómo podría corregir el error que me genera: "se requiere una referencia a un objeto para el campo, método o propiedad no estáticos", el detalle está en lo que figura en negrilla.

    https://onedrive.live.com/?id=40625E139D0F899F!1649&cid=40625E139D0F899F&group=0&parId=root&o=OneUp

    https://onedrive.live.com/?id=40625E139D0F899F!1650&cid=40625E139D0F899F&group=0&parId=root&o=OneUp


    Walter Gómez



    • Editado wago7wg7 jueves, 25 de junio de 2015 14:44
    jueves, 25 de junio de 2015 14:38

Respuestas

  • hola

    alli tendrias que usar el TryParse() porque parece ser que un campo de tu table no es del tipo datetime

    DateTime fechaIngreso;
    
    if(DateTime.TryParse(reader.GetString(7), out fechaIngreso)){
    
        pRegistro.FechaIngreso = fechaIngreso.ToString();
    
    }

    de esta forma si en tu db no tienes una fecha valida no fallara al convertir

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 25 de junio de 2015 15:45

Todas las respuestas

  • Hola amigo...una duda...en la linea de codigo...

     for (int i = 0; i < DatosCuadroVista.RowCount; i++)

    no tendria que ser por...

     for (int i = 0; i < DatosCuadroVista.lenght; i++)??????????????...

    has puesto un punto de interrupcion? sabes exactmanente en que linea se produce el problema? saludos

    jueves, 25 de junio de 2015 14:47
  • hola

    que es DatosCuadroVista ? es un control, porque sino deberias pasar por parametros

    public static Registros ObtenerRegistros(Int64 pId, DataGridView DatosCuadroVista)
    {
    
    }

    igualmente es incorrecto lo que realizas porque estas dando a es metodo dos responsabilidades, el procesar el grid deberia hacerlo por fuera del obtener

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 25 de junio de 2015 14:47
  • Hola wago7wg7 tu consulta esta retornando datos?, deberías realizar eso de la siguiente manera:

           SqlCommand comando = new SqlCommand(                    "Select Id, TipoDocumento, Documento, LugarExpedicion, Nombres,  Apellidos, Genero, FechaIngreso, FechaRetiro, FechaActualizacion, Carpeta, FechaReingreso, FechaSalidaReingreso, Observaciones from Registros where Id=@Id", Conexion);
    comando.Parameters.AddWithValue("@Id",pId)

    Ahora DatosCuadroVista entiendo que es un Datagridview, cual es el fin de preguntarle que campos son nulos ?.

    Espero haberte ayudado.


    jueves, 25 de junio de 2015 14:48
  • seria algo similar a esto

    public void button1_Click(...)
    {
    	ClasseXX.ObtenerRegistros(...);
    
    	for (int i = 0; i < DatosCuadroVista.RowCount; i++)
    	{
    		for (int j = 0; j < DatosCuadroVista.ColumnCount; j++)
    		{
    			if (DatosCuadroVista.Rows[i].Cells[j].Value == DBNull.Value)
    			{
    				DatosCuadroVista.Rows[i].Cells[j].Value = "null";
    			}
    		}
    	}
    	DatosCuadroVista.Update();
    }
    		
    
    
    public static Registros ObtenerRegistros(Int64 pId)
    {
    	using (SqlConnection Conexion = ConexionServidor.ObtenerConexion())
    	{
    		Registros pRegistro = new Registros();
    		SqlCommand comando = new SqlCommand(string.Format(
    			"Select Id, TipoDocumento, Documento, LugarExpedicion, Nombres,  Apellidos, Genero, FechaIngreso, FechaRetiro, FechaActualizacion, Carpeta, FechaReingreso, FechaSalidaReingreso, Observaciones from Registros where Id={0}", pId), Conexion);
    	   
    		SqlDataReader reader = comando.ExecuteReader();
    
    		while (reader.Read())
    		{
    			pRegistro.Id = reader.GetInt64(0);
    			pRegistro.TipoDocumento = reader.GetString(1);
    			pRegistro.Documento = reader.GetString(2);
    			pRegistro.LugarExpedicion = reader.GetString(3);
    			pRegistro.Nombres = reader.GetString(4);
    			pRegistro.Apellidos = reader.GetString(5);
    			pRegistro.Genero = reader.GetString(6);
    			pRegistro.FechaIngreso = Convert.ToString(reader.GetDateTime(7));
    			pRegistro.FechaRetiro = Convert.ToString(reader.GetDateTime(8));
    			pRegistro.FechaActualizacion = Convert.ToString(reader.GetDateTime(9));
    			pRegistro.Carpeta = reader.GetString(10);
    			pRegistro.FechaReingreso = Convert.ToString(reader.GetDateTime(11));
    			pRegistro.FechaSalidaReingreso = Convert.ToString(reader.GetDateTime(12));
    			pRegistro.Observaciones = reader.GetString(13);
    
    		}
    		Conexion.Close();
    		return pRegistro;
    	}
    }

    esa funcionalidad va por fuera

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 25 de junio de 2015 14:50
  • Mira las imágenes que dejé en los links

    Walter Gómez

    jueves, 25 de junio de 2015 15:01
  • DatosCuadroVista es el nombre que di al dataGridView y sí, ya probé lo que me recomendaste más abajo con lo cual se quitó el error.

    Walter Gómez

    jueves, 25 de junio de 2015 15:03
  • Mi consulta taslada desde el datagridview fechas null a un formulario.

    Walter Gómez

    jueves, 25 de junio de 2015 15:03
  • En parte se solucionó el inconveniente, pero ahora me sale lo que se ve en la imagen:


    Walter Gómez

    jueves, 25 de junio de 2015 15:05
  • Traslada desde el datagridview fechas null a un formulario.

    Walter Gómez

    jueves, 25 de junio de 2015 15:08
  • hola

    alli tendrias que usar el TryParse() porque parece ser que un campo de tu table no es del tipo datetime

    DateTime fechaIngreso;
    
    if(DateTime.TryParse(reader.GetString(7), out fechaIngreso)){
    
        pRegistro.FechaIngreso = fechaIngreso.ToString();
    
    }

    de esta forma si en tu db no tienes una fecha valida no fallara al convertir

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 25 de junio de 2015 15:45