SqlDataSource动态设置SelectCommand

时间:2009-07-28 10:32:54

标签: asp.net mysql sqldatasource selectcommand

我正在使用SqlDataSource并且为了避免在我的代码中直接编写长查询,我想我可以创建一个Query类,它返回我想要的查询字符串。我尝试了下面的代码,但我得到“服务器标签不能包含<%...%>构造”。

在我使用存储过程之前,但我的webhosting不允许这样做,所以当我考虑Query类解决方案时。我还需要补充一点,我不想在代码隐藏中进行数据绑定。

有没有办法做到这一点?

    <asp:SqlDataSource ID="DS" 
        runat="server"
        DataSourceMode="DataSet"  
        ConnectionString="<%$ ConnectionStrings:conn %>"
        ProviderName="MySql.Data.MySqlClient"
        SelectCommand="<% Query.getTestQuery() %>"
        >
    </asp:SqlDataSource>

2 个答案:

答案 0 :(得分:1)

在ASP.NET中无法执行此操作。 <% %>标记中的代码用于运行任意代码,而不是用于设置属性值。 <%= %>标记中的代码用于呈现输出流。 <%# %>中的代码用于数据绑定,类似于您要完成的操作,但它不一样。 <%$ %>中的代码用于表达式绑定,但它们在页面的生命周期中执行得太早,因此不太适用于您的场景。

使用ObjectDataSource是一种方法,因为此时它只是代码,您的代码可以根据页面状态做任何想做的事情。

使用派生的SqlDataSource是另一种选择。创建一个派生自SqlDataSource的控件并覆盖其OnInit方法。在OnInit方法中,您可以根据页面状态动态设置SelectCommand以执行任何操作。

答案 1 :(得分:0)

也许使用ObjectDataSource。这样,在您的对象中,您就可以在那里进行动态查询。

否则,您可以在代码隐藏中的SqlDataSource选择事件期间修改SelectCommand。然后你可以将SelectCommand更改为你喜欢的任何内容。