.net asp.net variables parameters sqldatasource

.net - ¿Cómo pasar variable a SelectCommand de SqlDataSource?



asp.net variables (10)

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

No quiero usar tipos de parámetros integrados (como ControlParemeter, QueryStringParameter, etc.)

Necesito pasar un 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>


Me encanta la respuesta de Al W. Aunque hay un error tipográfico.

<asp:DelegateParameter Name="userId" DbType="Guid" OnEvaluate="GetUserID" />

--- Debiera ser ---

<asp:DelegateParameter Name="userId" DbType="Guid" OnEvaluateParameter="GetUserID" />

Con suerte, esto le ahorra a alguien unos minutos.


Necesita definir un tipo válido de SelectParameter. Este artículo de MSDN describe los distintos tipos y cómo usarlos.


Puede usar el parámetro integrado OnSelecting de 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 su código detrás de implementar 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 usar esto para los otros tipos de operaciones DB, simplemente implemente sus propios métodos:

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


Siempre puedes hacerlo así en el código detrás:

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

EDITAR

Pruebe esto en su lugar, elimine la propiedad SelectCommand y SelectParameters:

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

Luego en el código detrás haz 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());


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

En el código detrás, agregue:

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

En la sección de parámetros de selección, agregue:

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


Vea si funciona si solo elimina el DbType = "Guid" del marcado.


para adjuntar a un GUID:

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


prueba 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


tuvimos que hacer esto tan a menudo que hice lo que llamé 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); } } }

ponga esta clase en su app_code (elimine el espacio de nombres si lo coloca allí) o en su ensamblaje de control personalizado. Después de que el control se haya registrado en web.config, debe poder 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>

Luego, en el código subyacente, implemente el GetUserID de la forma que desee.

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


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