Foros del Web » Programación para mayores de 30 ;) » .NET »

SQLDataSource y SP

Estas en el tema de SQLDataSource y SP en el foro de .NET en Foros del Web. Hola tengo un problema una duda con un sqldatasource y un sp, tengo una aplicacion que guarda un registro en la BD, tengo todos los ...
  #1 (permalink)  
Antiguo 01/08/2007, 07:27
 
Fecha de Ingreso: agosto-2007
Mensajes: 3
Antigüedad: 16 años, 9 meses
Puntos: 0
SQLDataSource y SP

Hola tengo un problema una duda con un sqldatasource y un sp, tengo una aplicacion que guarda un registro en la BD, tengo todos los controles ya relacionados con el sqldatasource, lo que no c es como ejecutar ese sqldatasource o el sp al darle click a un boton. Espero puedan ayudarme Gracias.
  #2 (permalink)  
Antiguo 08/08/2007, 10:41
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Re: SQLDataSource y SP

Hola a tod@s:

-- Trabajando en C# - ASP.NET 2.0 --

Justo este es el problema que estaba intentando averiguar como efectuarlo.

Yo también estaría interesado en saber como a través de pulsar un botón se puede ejecutar el SelectCommand de un SqlDataSource, el cuál viene dado por un Procedimiento almacenado de la Base de Datos.

Concretamente, mi caso es el siguiente:

Es una página que hace la función de login de usuario. Luego están los TextBox para un insertar el Nombre de Ususario y la Contraseña y el Botón de Entrar.

El SqlDataSource se encargará de realizar la consulta si los datos tecleados pertenecen a un ususario registrado. Si es así, se redirige al usuario a la página de inicio, sino se le advierte que no tiene permitido el acceso.

Anteriormente, había hecho todo programándolo por la parte de código .cs, usando un SqlCommand, e iniciando todo con el Click del botón

Este es el código con el SqlCommand:
Código:

    protected void btn_entrar_Click(object sender, EventArgs e)
    {
        //RECOGIENDO LOS DATOS DE ACCESO TECLEADOS
        usuUsu = usu_usu.Text;
        usuUsu = usuUsu.Replace("'", "''");
        usuPass = usu_pass.Text;
        usuPass = usuPass.Replace("'", "''");
        //VERIFICANDO DATOS
        verifDatosAcceso();

        if (verrorAcceso != "")
        {
            vinfoAcceso = "El ACCESO no se efectuó por falta de datos correctos:";
            vinfoAcceso = vinfoAcceso + "<p class='errores_acceso'>" + verrorAcceso + "</p>";
        }
        else
        {
            acceso_usuario();
        }
        //VACIANDO CAJA DE [Usuario] DEL FORMULARIO
        usu_usu.Text = "";
        //MOSTRANDO MENSAJE DE ACCESO FALLIDO Ó VÁLIDO
        panel_mens.Visible = true;
    }//fin btn_entrar_Click

    private void acceso_usuario()
    {
        SqlCommand coman_AccesoOK = new SqlCommand("SEL_usuId_perfilId_Acceso", conexion_ecogras);
        coman_AccesoOK.CommandType = CommandType.StoredProcedure;

        coman_AccesoOK.Parameters.Add(new SqlParameter("@usu_usu_prSel", SqlDbType.NVarChar)).Value = usuUsu.ToString();
        coman_AccesoOK.Parameters.Add(new SqlParameter("@usu_pass_prSel", SqlDbType.NVarChar)).Value = usuPass.ToString();
        coman_AccesoOK.Parameters.Add(new SqlParameter("@usu_id_prSel", SqlDbType.Int)).Direction = ParameterDirection.Output;
        coman_AccesoOK.Parameters.Add(new SqlParameter("@perfil_id_prSel", SqlDbType.TinyInt)).Direction = ParameterDirection.Output;
        coman_AccesoOK.Parameters.Add(new SqlParameter("@cuantosHay", SqlDbType.Int)).Direction = ParameterDirection.Output;
        int usu_valido = 0;

        try
        {
            conexion_ecogras.Open();
            coman_AccesoOK.ExecuteReader();
            usu_valido = (Int32)coman_AccesoOK.Parameters["@cuantosHay"].Value;
            //SI EL ACCESO ES DE UN USUARIO REGISTRADO
            if (usu_valido == 1)
            {
                btn_entrar.Enabled = false;
                btn_reset.Disabled = true;
                btn_salir.Enabled = true;

                Session["usu_id"] = coman_AccesoOK.Parameters["@usu_id_prSel"].Value;
                Session["perfil_id"] = coman_AccesoOK.Parameters["@perfil_id_prSel"].Value;

                //SI SE INTENTO ACCEDER ANTES DE LOGIN
                if (Request.QueryString["url_destino"] != null)
                {
                    //YENDO A PÁGINA REQUERIDA
                    Response.Redirect(Request.QueryString["url_destino"]);
                }
                else
                {
                    //YENDO A PÁGINA DE INICIO
                    Response.Redirect("home.aspx");
                }
            }
            else//SI NO ES UN USUARIO REGISTRADO
            {
                vinfoAcceso = "Solamente usuarios registrados/activos accederán al interior de este sitio web.";
                vinfoAcceso += "    <ul>\r";
                vinfoAcceso += "        <li>[ Registrarse ]</li>\r";
                vinfoAcceso += "    </ul>\r";
            }
            conexion_ecogras.Close();
        }
        catch (SqlException ex_AccesoAdmOK)
        {
            vinfoAcceso = "Se ha producido un error: " + ex_AccesoAdmOK;
        }
    }
Ahora lo que quiero conseguir es lo mismo, usando en vez del SqlCommand el SqlDataSource vinculado al mismo procedimiento SEL_usuId_perfilId_Acceso

Cuando he definido el SqlDataSource para esta página a través de la vista Diseño, con el asistente, poniéndole por nombre SqlDS_Login, he escogido el procedimiento y definido los parámetros quedando la parte html así:
Código HTML:
 <asp:SqlDataSource ID="SqlDS_Login" runat="server" ConnectionString="<%$ ConnectionStrings:ecogras_conexion %>"
            SelectCommand="SEL_usuId_perfilId_Acceso" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:FormParameter FormField="usu_usu" Name="usu_usu_prSel" Type="String" />
                <asp:FormParameter FormField="usu_pass" Name="usu_pass_prSel" Type="String" />
                <asp:Parameter Direction="Output" Name="usu_id_prSel" Type="Int32" />
                <asp:Parameter Direction="Output" Name="perfil_id_prSel" Type="Byte" />
                <asp:Parameter Direction="Output" Name="cuantosHay" Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource> 
El Procedimiento está construído así:
Código:
ALTER PROCEDURE [dbo].[SEL_usuId_perfilId_Acceso]
	@usu_usu_prSel NVARCHAR(200),
	@usu_pass_prSel NVARCHAR(200),
	@usu_id_prSel INT OUTPUT,
	@perfil_id_prSel TINYINT OUTPUT,

	@cuantosHay INT OUTPUT
AS
	SELECT @cuantosHay = COUNT(*)
	FROM
	USUARIOS INNER JOIN PERFILES
	ON
	USUARIOS.usu_perfil = PERFILES.perfil_id
	WHERE (usu_usu = @usu_usu_prSel) AND (usu_pass = @usu_pass_prSel)
	AND usu_activo = 1 AND perfil_activo = 1

IF @cuantosHay <= 0
	BEGIN
		PRINT '* NINGÚN USUARIO ENCONTRADO *'
		RETURN (0)
	END
ELSE
	BEGIN
		SELECT @usu_id_prSel = usu_id,  @perfil_id_prSel = perfil_id
		FROM USUARIOS INNER JOIN PERFILES
		ON
		USUARIOS.usu_perfil = PERFILES.perfil_id
		WHERE (usu_usu = @usu_usu_prSel) AND (usu_pass = @usu_pass_prSel)
	
		PRINT '* El USUARIO ESTÁ REGISTRADO *'
		PRINT @usu_id_prSel
		PRINT @perfil_id_prSel
		RETURN (1)
	END
Entonces, la cosa es la misma a realizar: si el parámetro de salida @cuantosHay es mayor de 0 es que los datos pertenecerán a un usuario registrado y entonces se le dará paso de la misma forma que antes se ha indicado.

Luego, ¿cómo ejecutar el Select del SqlDataSource para que se origine todo esto?

Gracias a todo el que aporte algo...
__________________
Saludos,

zacktagnan.
=================================================
  #3 (permalink)  
Antiguo 10/08/2007, 06:07
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Re: SQLDataSource y SP

Yo sigo buscando algo que me solucione lo planteado pero sino ... ¿no hay ninguno que sepa cómo hacerlo?

No sé a lo mejor tu zidannee llegaste a solucionarlo y por eso no has vuelto a demandar respuesta.

Si es así, estaría bien que pusieras como hiciste. Gracias.
__________________
Saludos,

zacktagnan.
=================================================

Última edición por zacktagnan; 10/08/2007 a las 06:13
  #4 (permalink)  
Antiguo 16/08/2007, 02:50
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Re: SQLDataSource y SP

Habiendo dejado un tiempo a la espera de alguna respuesta que aportara soluciones a las cuestiones planteadas, parece que será mejor no esperar más pues nadie sugiere nada.

Aprovechando esta falta de respuestas con solución, quisiera plantear una duda que siempre he tenido al respecto:
- aparte de que entre la gente corriente que accede al foro ¿los llamados "expertos" ó "moderadores" entran en todos los temas planteados ó no?
Pregunto esto porque a veces se ven temas que, aunque tengan visitas, siguen con la casilla de respuestas a 0 ó con respuestas del propio autor reclamando de nuevo una solución.

Una duda por tanto al respecto de esto es ¿cómo diferenciar que un tema no ha sido aún visionado por un experto ó moderador, ó que no tiene solución alguna?
Es decir, que a veces no se sabe si un tema planteado no recibe solución bien porque no ha sido atendido por alguien que sabe del tema ó bien porque no tiene solución alguna.

Si alguien me explica esto (en algún lado de las instruccciones creo leí que hay que insistir hasta recibir una respuesta deseada, ¿pero hasta cuándo?).

Y si ya de paso, aún hay alguien que sepa solucionar las cuestiones principales de este tema, pues se agradecerá...
__________________
Saludos,

zacktagnan.
=================================================
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:31.