这是我的下拉列表...
<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>然后我有一个网格视图,它的数据源看起来像:
<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”没有做我想做的事情。我有不同的视图,其名称对应于不同的时间范围,我希望能够更改网格视图,以填充基于用户通过下拉菜单选择的选项的信息。任何洞察力都将不胜感激。谢谢!!:D
发布于 2012-12-18 12:25:55
您可以使用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
ENDASPX:
<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>https://stackoverflow.com/questions/13923554
复制相似问题