asp.net - SqlDataSource动态设置SelectCommand

标签 asp.net mysql sqldatasource selectcommand

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

在我使用存储过程之前,但我的虚拟主机不允许这样做,所以这就是我考虑查询类解决方案的时候。我还需要补充一点,我不想在代码隐藏中进行数据绑定(bind)。

有办法做到这一点吗?

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

最佳答案

在 ASP.NET 中不可能执行此操作。代码在 <% %>标签用于运行任意代码,而不是用于设置属性值。代码在 <%= %>标签用于渲染到输出流。代码在 <%# %>用于数据绑定(bind),这与您想要完成的任务类似,但并不相同。代码在 <%$ %>用于表达式绑定(bind),但它们在页面生命周期中执行得太早,因此不太可能在您的场景中工作。

使用 ObjectDataSource 是一种方法,因为此时它只是代码,您的代码可以根据页面的状态执行任何操作。

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

关于asp.net - SqlDataSource动态设置SelectCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1193256/

相关文章:

c# - 使用 StreamReader 文本中的 XElement 创建新的 XDocument

asp.net - 使用 jQuery 调用 ASP.NET PageMethod/WebMethod - 返回整个页面

Python:从mysql中选择适当的类型

java - 使用MySql在Hibernate中获取lazyLoadException

c# - ora-00972 标识符太长 oracle 10g

c# - 从列表中获取列值

c# - IISExpress 找不到使用 Visual Studio 2013 运行本地主机的 ssl 页面

php - 建立评级系统 : database structure involve user_id?

jboss5.x - 意外 token UNIQUE,需要在语句 [SET DATABASE UNIQUE] 中进行 COLLATION

c# - 清除sqldatasource过滤器表达式