C# 如何在c中的sqldatasource会话参数中嵌入变量值#

C# 如何在c中的sqldatasource会话参数中嵌入变量值#,c#,C#,我想询问如何在c#中的sqldatasource会话参数中嵌入变量值。这是mycode: default.aspx: <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Ora2011 %>" ProviderName="<%$ ConnectionStrings:Ora2011.ProviderName %>"

我想询问如何在c#中的sqldatasource会话参数中嵌入变量值。这是mycode:

default.aspx:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:Ora2011 %>" 
    ProviderName="<%$ ConnectionStrings:Ora2011.ProviderName %>" 
    SelectCommand="SELECT ID, CATEGORY_NAME FROM (:INVENT_CATEGORY)"> 
    <SelectParameters>
        <asp:SessionParameter Name="INVENT_CATEGORY" SessionField="INVENT_CATEGORY" Type="String" />
    </SelectParameters>     
</asp:SqlDataSource>

当我运行这个程序时,我得到错误“无效的表名”。为什么我不能从会话参数将变量嵌入sqldatasource。感谢您的帮助

您的问题与会话参数无关。。。问题是您试图通过一个参数指定表名——我很确定这是不受支持的。您必须自己在代码中构建查询字符串,才能完成您要做的事情

我不知道为什么要在会话中存储表名,但在代码中设置sql select的一个示例是

标记:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:Ora2011 %>" 
    ProviderName="<%$ ConnectionStrings:Ora2011.ProviderName %>" 
</asp:SqlDataSource>

您必须确保表名的会话值只能包含有效值,否则存在SQL注入攻击的危险。

谢谢您的回答。你能给我举个例子吗。
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:Ora2011 %>" 
    ProviderName="<%$ ConnectionStrings:Ora2011.ProviderName %>" 
</asp:SqlDataSource>
protected void Page_Load(object sender, EventArgs e)
{
    string table = (string)(Session["INVENT_CATEGORY"] ?? "V_INVENTORY");

    SqlDataSource1.SelectCommand = "SELECT ID, CATEGORY_NAME FROM " + table;
}