我有一个数据库连接,它从查询字符串中获取输入以访问适当的数据。但是我现在通过编码这些数据来升级。因此,我现在需要通过函数运行QueryString值来取消编码。
目前我有DataSource的代码:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:spareathoughtConnectionString %>"
SelectCommand="campaign_Statistics" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:QueryStringParameter DefaultValue="0" Name="tmp_Campaign"
QueryStringField="camp" Type="Int64" />
</SelectParameters>
</asp:SqlDataSource>
QueryString值为'camp'。
在我的代码中,我将通过以下代码处理此值;
Convert.ToInt64(HttpUtility.UrlDecode(TamperProofQueryString.decode(Request.QueryString["camp"])))
那么,如何将上面的代码行合并到数据源中呢?即我需要用'Convert.ToInt64(HttpUtility.UrlDecode(TamperProofQueryString.decode(Request.QueryString [“camp”])))''
有效地取代'camp'。我希望这有道理吗?
由于
答案 0 :(得分:2)
将其更改为普通<asp:Parameter
而非<asp:QueryStringParameter
。然后处理数据源的OnSelecting
事件。您应该能够在代码隐藏中为SqlCommand设置参数值。
在aspx标记中:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:spareathoughtConnectionString %>"
SelectCommand="campaign_Statistics" SelectCommandType="StoredProcedure"
OnSelecting="SqlDataSource1_Selecting">
<SelectParameters>
<asp:Parameter DefaultValue="0" Name="tmp_Campaign" Type="Int64" />
</SelectParameters>
</asp:SqlDataSource>
在代码隐藏中:
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.Parameters["@tmp_Campaign"].Value = Convert.ToInt64(TamperProofQueryString.decode(HttpUtility.UrlDecode(Request.QueryString["camp"])));
}
另外,看看那个,你不应该在 TamperProof解码之前使用UrlDecode 吗?
答案 1 :(得分:1)
如果您想在没有代码的情况下完成所有操作,可以执行以下操作:
<asp:SqlDataSource
ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:spareathoughtConnectionString %>"
SelectCommand="campaign_Statistics" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
<%
SqlDataSource1.SelectParameters.Add(
"tmp_Campaign",
Convert.ToString(HttpUtility.UrlDecode(TamperProofQueryString.decode(Request.QueryString["camp"]))));
%>