none
Procedimiento almacenado RRS feed

  • Pregunta

  • Hola Amigos

    Necesito su ayuda, necesito que en webform2 aparezca el nombre del usuario que se logueo en el web form "Login" con un numero de ficha y password, los procedimientos almacenados lostengo en una clase llamada Data.

    Este es mi procedimiento almacenado en sql y y C#

    public static string ConsultarDocumento(string ficha)
            {
                string name = "Nombre";

                using (SqlConnection conn = DBConexion())
                {
                    using (SqlCommand comm = new SqlCommand("SP_ConsultarDocumento", conn))
                    {
                        comm.Connection = conn;
                        comm.CommandType = CommandType.StoredProcedure;
                        comm.Parameters.AddWithValue("@Ficha", ficha);
                        SqlDataAdapter da = new SqlDataAdapter(comm);
                        //SqlDataReader read = comm.ExecuteReader();
                        DataTable ds = new DataTable();
                        da.Fill(ds);

                        try
                        {
                            conn.Open();
                            comm.ExecuteNonQuery();
                            name = (string)comm.Parameters["Nombre"].Value;
                        }

                        catch (SqlException err)
                        {
                            logger.Error(err);
                        }
                    }
                }
                return name;
            }

    jueves, 10 de octubre de 2019 16:01

Todas las respuestas

  • Aprecio los siguientes errores en ese código. Puede que aparte haya otros que no sean tan evidentes:

    1. En la colección de parámetros del comm tan solo se añade uno llamado @Ficha, pero después del ExecuteNonQuery intentas leer un parámetro llamado "Nombre", que no ha sido añadido al command.
    2. "Nombre" no es un nombre válido para un parámetro, todos tienen que empezar por "@".
    3. Utilizas el command mediante un DataAdapter para hacer un Fill de un DataTable, pero luego no usas para nada el DataTable y vuelves a ejecutar por segunda vez el procedimiento almacenado con un ExecuteNinQuery. Esto por sí solo no tiene por qué ocasionar un error, pero puede ser que por dentro el procedimiento tenga un efecto colateral indeseable en caso de ejecutarlo más veces de las necesarias (por ejemplo, si acumula en una tabla el número de veces que lo han llamado, contaría el doble de lo correcto).
    4. Asignas por duplicado la conexión al command (una vez en el constructor y otra a travésde la propiedad Connection. Esto no ocasionará ningún error, pero una de las dos asignaciones es superflua.
    jueves, 10 de octubre de 2019 18:52
    Moderador
  • hola samuel

    Obviar crear variables totalingresos2 y totalgastos2, no hay necesidad para mi punto de vista

    lblingresos.Text =cmd.Parameters["@TOTALingresos"].Value.ToString("N2");

    o el string format

    lblgastos.TExt = String.Format("{0:C2}"cmd.Parameters["@TOTALGASTOS"].Value);

    SUERTE!!

    jueves, 10 de octubre de 2019 19:35