2009-01-27 54 views
26

我想將後面的代碼中的變量傳遞給SelectCommand的SqlDataSource?如何將變量傳遞給SelectCommand的SqlDataSource?

我不想使用內置參數類型(如ControlParemeter,QueryStringParameter等)

我需要通過一個vraiable?

下面的例子不工作

<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> 

回答

21

你總是可以做這樣的在後面的代碼:

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

編輯

試試這個,取出的SelectCommand物業和SelectParameters:

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

然後在後面的代碼做到這一點:

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" 

這個工作對我來說,這也可以工作:

<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

這是行不通的,因爲我的變量類型是GUID 感謝他們沒有提到這個變量傳遞任何方式 – ahmed 2009-01-27 23:32:05

0

您需要定義SelectParameter的有效的類型。這MSDN article描述了各種類型以及如何使用它們。

+0

文章剛解釋內置參數 感謝任何方式 – ahmed 2009-01-27 23:37:09

0

看看它是否工作,如果你只是從標記中刪除DbType =「Guid」。

4

附加到一個GUID:

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

,我們不得不經常說我做了什麼,我叫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); 
     } 
    } 
} 

把這個班無論是在你的app_code做到這一點(刪除命名空間,如果你把它放在)或你的自定義控制組件。控制在web.config登記後,你應該能夠在你背後反正你喜歡落實GetUserID做到這一點

<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> 

然後在代碼中。

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

甜蜜,luved這一個!謝謝! – 2015-05-07 01:09:15

+0

不知道這是因爲我使用`AutoEventWireup`或不是,但我得到`Type'MyProject.Controls.DelegateParameter'沒有名爲'OnEvaluate'`的公共屬性` – 2017-10-03 17:18:49

9

只需將自定義屬性添加到頁面,該頁面將返回您選擇的變量。然後可以使用內置的「控制」參數類型。

在後面的代碼,添加:

Dim MyVariable as Long 


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

在選擇參數部分添加:

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

嘗試與此有關。

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

您可以使用內置的ASP的OnSelecting參數:SqlDataSource的

例子: [.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> 
在你的代碼

那麼後面實現你OnSelecting方法: [.aspx.cs]

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

您也可以使用這個對於其他類型的數據庫的操作只需要實現自己的方法:

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