2009-01-27 24 views
26

Quiero pasar variable desde el código de atrás a SelectCommand de SqlDataSource?¿Cómo pasar variable a SelectCommand de SqlDataSource?

no quiero utilizar tipos de parámetros incorporados (como ControlParemeter, QueryStringParameter, etc)

Necesito pasar una vraiable?

el siguiente ejemplo no funciona

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:itematConnectionString %>" 
    SelectCommand = "SELECT items.name, items.id FROM items INNER JOIN users_items ON items.id = users_items.id WHERE (users_items.user_id = @userId) ORDER BY users_items.date DESC"> 
    <SelectParameters> 
    <asp:Parameter DefaultValue="<%= userId %>" Name="userId" DbType="Guid" /> 
    </SelectParameters> 

Respuesta

21

Siempre se puede hacerlo de esta manera en el código detrás:

SqlDataSource1.SelectParameters.Add("@userId", userId); 

EDITAR

Prueba este lugar, retire el SelectCommand propiedad y SelectParameters:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:itematConnectionString %>"> 

Luego, en el código detrás de hacer esto:

SqlDataSource1.SelectParameters.Add("userId", userId.ToString()); 

SqlDataSource1.SelectCommand = "SELECT items.name, items.id FROM items INNER JOIN users_items ON items.id = users_items.id WHERE (users_items.user_id = @userId) ORDER BY users_items.date DESC" 

Esto funcionó para mí, esto también funciona:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:itematConnectionString %>" 
    SelectCommand = "SELECT items.name, items.id FROM items INNER JOIN users_items ON items.id = users_items.id WHERE (users_items.user_id = @userId) ORDER BY users_items.date DESC"></asp:SqlDataSource> 


SqlDataSource1.SelectParameters.Add("userid", DbType.Guid, userId.ToString()); 
+1

no funciona porque mi tipo de variable es GUID gracias cualquier manera – ahmed

0

es necesario definir un tipo válido de SelectParameter. Esta MSDN article describe los distintos tipos y cómo usarlos.

+0

que no mencionar pasar variables en este el artículo explica el parámetro incorporado gracias de cualquier manera – ahmed

0

Vea si funciona si elimina el DbType = "Guid" de la marca.

4

para adjuntar a un GUID:

SqlDataSource1.SelectParameters.Add("userId", System.Data.DbType.Guid, userID); 
11

tuvimos que hacer esto tan a menudo que he hecho lo que he llamado una clase DelegateParameter

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Web.UI.WebControls; 
using System.Reflection; 

namespace MyControls 
{ 
    public delegate object EvaluateParameterEventHandler(object sender, EventArgs e); 

    public class DelegateParameter : Parameter 
    { 
     private System.Web.UI.Control _parent; 
     public System.Web.UI.Control Parent 
     { 
      get { return _parent; } 
      set { _parent = value; } 
     } 

     private event EvaluateParameterEventHandler _evaluateParameter; 
     public event EvaluateParameterEventHandler EvaluateParameter 
     { 
      add { _evaluateParameter += value; } 
      remove { _evaluateParameter -= value; } 
     } 

     protected override object Evaluate(System.Web.HttpContext context, System.Web.UI.Control control) 
     { 
      return _evaluateParameter(this, EventArgs.Empty); 
     } 
    } 
} 

poner esta clase ya sea en su App_Code (quitar la espacio de nombres si lo coloca allí) o en su conjunto de control personalizado. Después de que el control se registra en el web.config que debería ser capaz de hacer esto

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:itematConnectionString %>" 
    SelectCommand = "SELECT items.name, items.id FROM items INNER JOIN users_items ON items.id = users_items.id WHERE (users_items.user_id = @userId) ORDER BY users_items.date DESC"> 
    <SelectParameters> 
    <asp:DelegateParameter Name="userId" DbType="Guid" OnEvaluate="GetUserID" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

a continuación en el código detrás de implementar la GetUserID modos que te gusta.

protected object GetUserID(object sender, EventArgs e) 
{ 
    return userId; 
} 
+0

dulce, luved este! ¡gracias! –

+0

No estoy seguro de si esto es porque utilizo 'AutoEventWireup' o no, pero obtengo' Type 'MyProject.Controls.DelegateParameter' no tiene una propiedad pública llamada 'OnEvaluate'' –

9

Simplemente agregue una propiedad personalizada a la página que le devolverá la variable de su elección. Luego puede usar el tipo de parámetro de "control" incorporado.

En el código subyacente, agregue:

Dim MyVariable as Long 


ReadOnly Property MyCustomProperty As Long 
    Get 
     Return MyVariable 
    End Get 
End Property 

En la sección de selección parámetros complemento:

<asp:ControlParameter ControlID="__Page" Name="MyParameter" 
PropertyName="MyCustomProperty" Type="Int32" /> 
+0

También tuve que hacer esto, pero desde dentro de mi usuario controlar. __La página no funciona en ese caso. Dentro de un control de usuario, ControlID es el nombre de clase del control de usuario, entonces funciona bien. – Jim

0

tratar con esto.

Protected Sub SqlDataSource_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles SqlDataSource.Selecting 

    e.Command.CommandText = "SELECT [ImageID],[ImagePath] FROM [TblImage] where IsActive = 1" 

    End Sub 
2
SqlDataSource1.SelectCommand = "select * from ta where name like '%'[email protected]+'%'"; 
if (SqlDataSource1.SelectParameters.Count == 0) 
{ 
    SqlDataSource1.SelectParameters.Add("p", DbType.String, TextBox1.Text); 
} 
SqlDataSource1.SelectParameters["p"].DefaultValue = TextBox1.Text; 
4

Usted puede utilizar el construido en el parámetro de OnSelecting asp: SqlDataSource

Ejemplo: [archivo .aspx]

<asp:SqlDataSource ID="SqldsExample" runat="server" 
SelectCommand="SELECT [SomeColumn], [AnotherColumn] 
       FROM [SomeTable] 
       WHERE [Dynamic_Variable_Column] = @DynamicVariable" 
OnSelecting="SqldsExample_Selecting"> 
<SelectParameters> 
    <asp:Parameter Name="DynamicVariable" Type="String"/> 
</SelectParameters> 

Luego, en el código detrás de poner en práctica su método OnSelecting : [.aspx.cs]

protected void SqldsExample_Selecting(object sender, SqlDataSourceCommandEventArgs e) 
{ 
    e.Command.Parameters["@DynamicVariable"].Value = (whatever value you want); 
} 

También puede utilizar esto para los otros tipos de operaciones de base de datos simplemente aplicar sus propios métodos:

OnInserting="SqldsExample_Inserting" 
OnUpdating="SqldsExample_Updating" 
OnDeleting="SqldsExample_Deleting" 
Cuestiones relacionadas