【问题标题】:Pass variable to sqldatasource Select command client side将变量传递给 sqldatasource 选择命令客户端
【发布时间】:2023-03-17 14:37:02
【问题描述】:

我有一个网格和一个下拉列表,用户可以从中选择要填充网格的查询。 现在它工作正常:

protected void Button1_Click(object sender, EventArgs e)
    {
        string selected = DropDownList1.SelectedItem.Value;
        if (selected == "0")
        {
            Label1.Text = "You shall select a query!";
        }
        else
        {
            int x = Int32.Parse(selected);
            string query = "";
            switch (x)
            {
                case 1:     //Top 100 TB 321
                    query = @"...something...";
                    SqlDataSource1.SelectCommand = query;
                    break;

                case 2:
                    query = @"....something else....";
                    SqlDataSource1.SelectCommand = query;
                    break;

                case 3:     
               .......
            }
        }

而在标记中,我只是有带有连接字符串的 sqldatsource:

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

使用上面的代码,我无法导出网格的内容,因为它会生成错误“对象引用未设置为对象的实例”。为了避免这个问题,我应该将查询作为变量传递给标记中的 sqldatasource,而不是从后面的代码中定义 select 命令。 如何将变量“查询”传递给标记中的 sqldatasource SelectCommand?

【问题讨论】:

  • 您是否确切地知道 哪里 Null 引用异常(“...未设置为实例...”错误)来自?我可以看到一些可以产生一个的地方。例如,您假设DropDownList1 总是有一个SelectedItem。在任何情况下,都没有客户端 SqlDataSource。这纯粹是服务器端的事情,而且有充分的理由;如果客户端代码可以访问您的数据库,那么任何加载您的 Web 应用程序的人都可以访问您的数据库凭据,并且可以登录并搞砸东西。
  • 我用来导出的方法是从 sqldatasource 获取数据,所以在我点击导出的时候,那里没有选择命令。这就是为什么我想在标记中将变量传递给 Sqldatsource 的 SelectCommand。对不起,我的问题中的错误,我现在会更新它。
  • 网络应用用户是否点击了“导出”按钮?如果是这样,为什么不让它的处理程序检查 DropDownList 选定值并设置 SelectCommand,就像您在上面的代码中所做的那样?
  • 听起来不错。谢谢。

标签: asp.net sqldatasource


【解决方案1】:

如果“导出”功能也是来自 Web 应用程序的回调,您应该能够在回调中看到 DropDownList1 的状态。使用它来设置 SelectCommand ,如上面的代码中所示。 (我建议将重复的代码移到它自己的辅助函数中,这样如果您从多个地方调用它,您以后编辑该功能时就不必全部更改)。

或者,但是 SqlDataSource 在服务器上的会话存储中,而不是假装它是网页的一部分。然后,当您设置它的 SelectCommand 时,该值将在回调中被记住。

【讨论】:

  • 我正在尝试使用会话变量“query”而不是从后面的代码中设置 SelectCommand,然后在 sqlparameters 中使用此类变量并设置 SelectCommand="@query"。但是现在出现了一个新错误:“名称'myquerytext'不是有效标识符!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 2015-02-15
  • 2015-04-16
  • 2019-02-16
  • 2017-12-15
  • 2012-06-24
  • 1970-01-01
相关资源
最近更新 更多