2

是否可以将字段名称用作 SQLDataSource 中的选择参数?

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DbConnection %>" 
    ProviderName="<%$ ConnectionStrings:DbConnection.ProviderName %>"      
SelectCommand="select * from sometable where @FieldKey = @FieldValue">
<SelectParameters>
    <asp:Parameter Name="FieldKey" Type="String" />
    <asp:Parameter Name="FieldValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
4

3 回答 3

1

这是我大部分时间的hack(解决方法)

protected void page_load(...)
{
   SqlDataSource1.SelectParameters["FieldKey"] = field;
   SqlDataSource1.SelectParameters["FieldName"] = name;
}

或创建两个隐藏字段,将值分配给这些字段,然后使用

<asp:ControlParameter />

这是另一个黑客

于 2012-05-31T03:07:29.403 回答
1

选项1

如果FieldKey并且FieldName正在从后面的代码中获取,我认为您可以轻松地设置如下命令。

SqlDataSource1.SelectCommand = string.Format("select * from sometable where {0} = {1}",fieldKey ,fieldValue)

请验证 SQL 注入攻击的输入字段。

选项 2

创建存储过程以接受两个参数 key 和 value,您需要从这些参数构建 SQL 查询并在存储过程中执行

然后你可以从数据源调用它。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DbConnection %>" 
    ProviderName="<%$ ConnectionStrings:DbConnection.ProviderName %>"      
    SelectCommand="StoredProcedureName"
    SelectCommandType="StoredProcedure">
<SelectParameters>
    <asp:Parameter Name="FieldKey" Type="String" />
    <asp:Parameter Name="FieldValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
于 2012-05-31T06:38:10.480 回答
0

如果您的意思是使用来自控件的值 [如文本框、下拉菜单],那么这里有一些东西

<SelectParameters>
    <asp:ControlParameter ControlID="FieldKey" PropertyName="Text"
         Type="String" />
    <asp:ControlParameter ControlID="FieldName" PropertyName="Text"
         Type="String" />
</SelectParameters>

假设值存储在文本框中

于 2012-05-31T02:41:18.980 回答