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

Consulta con variable en GridView

Estas en el tema de Consulta con variable en GridView en el foro de .NET en Foros del Web. Buenas, Quiero hacer una consulta a un servidor SQL que en la cláusula WHERE incluya una variable de ASPX, en este caso el nombre de ...
  #1 (permalink)  
Antiguo 06/06/2011, 08:05
 
Fecha de Ingreso: junio-2011
Mensajes: 18
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta Consulta con variable en GridView

Buenas,

Quiero hacer una consulta a un servidor SQL que en la cláusula WHERE incluya una variable de ASPX, en este caso el nombre de usuario logueado.

Adjunto el código:

SOPORTE.ASPX
Código:
 <div class="gensoporte">
       <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
               ConnectionString="<%$ ConnectionStrings:trackpasoConnectionString %>" SelectCommand="SELECT DISTINCT W.WORKITEMKEY, S.LABEL as ESTADO, W.PACKAGESYNOPSYS
FROM TWORKITEM as W, TSTATE as S, TCLIENTE as C
WHERE (W.STATE = S.PKEY)
AND
(W.CLIENTEKEY = C.PKEY)
AND (C.LABEL = ' & strUser & ')
AND (S.LABEL != 'closed')"></asp:SqlDataSource>
           <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
               DataSourceID="SqlDataSource1">
           </asp:GridView>
           <asp:Label ID="label11" runat="server" Text="Label"></asp:Label>
       
    </div>
SOPORTE.ASPX.VB

Código:
Public Class soporte
    Inherits System.Web.UI.Page



    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim strUser As String = System.Web.HttpContext.Current.User.Identity.Name
        Me.label11.Text = strUser
      
    End Sub

End Class
Como podéis ver, la variable que quiero emplear es strUser, que la genero al cargar la página soporte.aspx y toma el valor del usuario logueado. Si muestro la variable en un label lo hace correctamente.

Y si sustituyo la variable en la sentencia SQL por el nombre del usuario logueado también me muestra datos.

A ver si me podéis echar una mano, que veo el tema complicado..

Saludos.
  #2 (permalink)  
Antiguo 06/06/2011, 08:48
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 12 años, 10 meses
Puntos: 344
Respuesta: Consulta con variable en GridView

No puedes utilizar las variables directamente, pero puedes hacerlo de varias maneras, por ejemplo, usando variables de sesión o de contexto.

En tu caso, mejor de contexto porque sólo lo usas durante esa petición.

Código vb:
Ver original
  1. Public Class soporte
  2.     Inherits System.Web.UI.Page
  3.  
  4.  
  5.  
  6.     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  7.         Dim strUser As String = System.Web.HttpContext.Current.User.Identity.Name
  8.         Me.label11.Text = strUser
  9.         Context.Items.Add("var_user", strUser);
  10.      
  11.     End Sub
  12.  
  13. End Class

Código ASP:
Ver original
  1. <div class="gensoporte">
  2.        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
  3.                ConnectionString="<%$ ConnectionStrings:trackpasoConnectionString %>" SelectCommand="SELECT DISTINCT W.WORKITEMKEY, S.LABEL as ESTADO, W.PACKAGESYNOPSYS
  4. FROM TWORKITEM as W, TSTATE as S, TCLIENTE as C
  5. WHERE (W.STATE = S.PKEY)
  6. AND
  7. (W.CLIENTEKEY = C.PKEY)
  8. AND (C.LABEL = ' & <%= Context.Items["var_user"] as String %>  & ')
  9. AND (S.LABEL != 'closed')"></asp:SqlDataSource>
  10.            <asp:GridView ID="GridView1" runat="server" AllowPaging="True"
  11.                DataSourceID="SqlDataSource1">
  12.            </asp:GridView>
  13.            <asp:Label ID="label11" runat="server" Text="Label"></asp:Label>
  14.        
  15.     </div>

También puedes usar directamente System.Web.HttpContext.Current.User.Identity.Name en la página aspx por que si está definida esa variable en ese ámbito.

También ten en cuenta que para utilizar variables tienes que encerrar la expresión entre <%= %>. Esto sólo en caso de expresiones simples (sólo un valor).
  #3 (permalink)  
Antiguo 06/06/2011, 10:59
 
Fecha de Ingreso: junio-2011
Mensajes: 18
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Consulta con variable en GridView

Gracias por la respuesta alexg88,

He probado con tu código y al ejecutarlo me da un parser error:

Parser Error Message: Server tags cannot contain <% ... %> constructs.

Lo tengo tal que así:

Código ASP:
Ver original
  1. <div class="gensoporte">
  2.        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
  3.                ConnectionString="<%$ ConnectionStrings:trackpasoConnectionString %>" SelectCommand="SELECT DISTINCT W.WORKITEMKEY, S.LABEL as ESTADO, W.PACKAGESYNOPSYS
  4. FROM TWORKITEM as W, TSTATE as S, TCLIENTE as C
  5. WHERE (W.STATE = S.PKEY)
  6. AND
  7. (W.CLIENTEKEY = C.PKEY)
  8. AND (C.LABEL = ' & <%= Context.Items["var_user"] as String %>  & ')
  9. AND (S.LABEL != 'closed')">
  10. </asp:SqlDataSource>
  11.            <asp:GridView ID="GridView1" runat="server" AllowPaging="True"
  12.                DataSourceID="SqlDataSource1">
  13.            </asp:GridView>
  14.            <asp:Label ID="label11" runat="server" Text="Label"></asp:Label>
  15.        
  16.     </div>
  #4 (permalink)  
Antiguo 06/06/2011, 11:44
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 12 años, 10 meses
Puntos: 344
Respuesta: Consulta con variable en GridView

Ah claro, no me había fijado. Como estás utilizando etiquetas asp no se puede poner <%= %> dentro de ellas.

Tendrás que usar las etiquetas <selectparameters> y <asp:SessionParameter>:

Código ASP:
Ver original
  1. <div class="gensoporte">
  2.        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
  3.                ConnectionString="<%$ ConnectionStrings:trackpasoConnectionString %>" SelectCommand="SELECT DISTINCT W.WORKITEMKEY, S.LABEL as ESTADO, W.PACKAGESYNOPSYS
  4. FROM TWORKITEM as W, TSTATE as S, TCLIENTE as C
  5. WHERE (W.STATE = S.PKEY)
  6. AND
  7. (W.CLIENTEKEY = C.PKEY)
  8. AND (C.LABEL = @var_user)
  9. AND (S.LABEL != 'closed')">
  10. <SelectParameters>
  11.                <asp:SessionParameter Name="var_user" SessionField="var_user" Type="String" />    
  12.           </SelectParameters>
  13. </asp:SqlDataSource>
  14.            <asp:GridView ID="GridView1" runat="server" AllowPaging="True"
  15.                DataSourceID="SqlDataSource1">
  16.            </asp:GridView>
  17.            <asp:Label ID="label11" runat="server" Text="Label"></asp:Label>
  18.        
  19.     </div>

Pero, tendrás que cambiar el Context por Session:

Código vb:
Ver original
  1. Public Class soporte
  2.     Inherits System.Web.UI.Page
  3.  
  4.  
  5.  
  6.     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  7.         Dim strUser As String = System.Web.HttpContext.Current.User.Identity.Name
  8.         Me.label11.Text = strUser
  9.         Session.Add("var_user", strUser);
  10.      
  11.     End Sub
  12.  
  13. End Class
  #5 (permalink)  
Antiguo 06/06/2011, 14:59
 
Fecha de Ingreso: junio-2011
Mensajes: 18
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Consulta con variable en GridView

Perfecto. Funcionó. Gracias!!

Etiquetas: sql, aspx, variables
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 02:07.