这是我有一个下拉列表......
<asp:DropDownList
ID="selectTimeFrame"
runat="server"
AutoPostBack="true"
DataTextField="Increment"
DataValueField="Increment"
DataSourceID="SqlTimeFrame"
</asp:DropDownList>
其数据源:
<asp:SqlDataSource
ID="SqlTimeFrame"
runat="server"
ConnectionString="<% connectionstring %>"
SelectCommand="Select [IncrementID], [Increment] FROM [TimeFrame] ORDER BY [IncrementID]" >
</asp:SqlDataSource>
然后我有一个gridview,数据源看起来像:
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<% connectinstring %>"
ProviderName="<% connectionstring %>"
SelectCommand="SELECT * FROM @TimeFrame">
<SelectParameters>
<asp:ControlParameter ControlID="selectTimeFrame"
Name="TimeFrame"
PropertyName="SelectedValue"
Type="String" />
</SelectParameters>
显然,我遇到问题的地方是“FROM @TimeFrame”没有按照我的意愿行事。我有不同的视图,其名称对应于不同的时间范围,我希望能够根据用户通过下拉菜单选择的选项更改gridview以填充该信息。任何见解都会非常感激......谢谢!! :d
答案 0 :(得分:0)
你可以使用dynamic SQL来实现你正在寻找的东西,尽管你需要非常彻底地测试它以防止SQL注入攻击,因为我们永远不会相信从用户那里收到的输入。
我创建了一个简单的存储过程,用于检查数据库中是否存在该表,如果存在,则构造并执行动态SQL语句:
存储过程:
CREATE PROCEDURE dbo.GetData
@TableName NVARCHAR(200)
AS
BEGIN
IF OBJECT_ID(@TableName , N'U') IS NOT NULL
BEGIN
EXEC('SELECT * FROM ' + @TableName);
END
END
<强> ASPX:强>
<asp:DropDownList ID="selectTimeFrame" runat="server" AutoPostBack="true" DataTextField="Increment"
DataValueField="Increment" DataSourceID="SqlTimeFrame" />
<asp:SqlDataSource ID="SqlTimeFrame" runat="server" ConnectionString="<%$ ConnectionStrings:connectionstring %>"
SelectCommand="Select [IncrementID], [Increment] FROM [TimeFrame] ORDER BY [IncrementID]">
</asp:SqlDataSource>
<asp:SqlDataSource ID="dynamicDS" runat="server" ConnectionString="<%$ ConnectionStrings:connectionstring %>"
SelectCommand="GetData" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter ControlID="selectTimeFrame" Name="TableName" PropertyName="SelectedValue"
Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:GridView ID="gvData" DataSourceID="dynamicDS" runat="server">
</asp:GridView>