【问题标题】:How can I set the sqldatasource parameter's value?如何设置 sqldatasource 参数的值?
【发布时间】:2010-11-02 13:58:59
【问题描述】:

我正在尝试设置sqldatasource 的selectcommand 参数@ClientID 的值,如下面的代码所示,但没有成功。

我的代码:

Dim strCommand = "SELECT caller_id, phone, name, email FROM callers WHERE client_id=@ClientID"

SqlDataSource2.SelectCommand = strCommand

SqlDataSource2.SelectParameters.Add("@ClientID", iClientID) 

我做错了什么?

【问题讨论】:

    标签: asp.net sqldatasource


    【解决方案1】:

    使其工作的技巧是在添加之前删除您尝试使用的参数。您的代码的以下改编版本应该可以工作:

    ' NOTE that there is no "@" sign when you use your parameters in the code
    Parameter p = strCommandSqlDataSource2.SelectParameters["ClientID"]
    strCommandSqlDataSource2.SelectParameters.Remove(p)
    strCommandSqlDataSource2.SelectParameters.Add("ClientID", iClientID)
    

    在其用法的代码部分命名参数时,不应使用“@”符号。您应该只在 SQLCOMMAND 字符串中使用它。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      您可以这样设置参数的值:

      SqlParameter parameter1 = new SqlParameter("@ClientID", SqlDbType.BigInt);
      parameter1.Value = 32;
      SqlDataSource2.SelectParameters.Add(parameter1);
      

      【讨论】:

      • 这在 C# 中也不起作用。这两种类型的参数不能像示例中那样自动转换。
      【解决方案3】:

      没关系...配置数据源的参数以获取另一个控件的值..

      【讨论】:

      • 这真是一个很好的解决方案。您也可以从 Session 中读取参数的值。
      【解决方案4】:

      如果您已使用 WYSWIG 编辑器创建数据源并希望以编程方式更新 SQL 参数,则需要执行以下操作:

      Dim strCommand = "SELECT caller_id, phone, name, email FROM callers WHERE client_id=@ClientID"
      
      SqlDataSource2.SelectCommand = strCommand
      
      **SqlDataSource2.SelectParameters.Clear();**
      
      SqlDataSource2.SelectParameters.Add("@ClientID", iClientID)
      

      【讨论】:

        【解决方案5】:

        我有从 GET 到 SelectCommand 参数的变量解决方案

        Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
           Dim p As Parameter = SQLDataSource.SelectParameters("Order_id")
           If IsNothing(p) Then
                SQLDataSource.SelectParameters.Add("Order_id", Server.HtmlEncode(Request.QueryString("Order_id")).ToString())
           End If
        End Sub
        

        【讨论】:

          【解决方案6】:
          protected void Page_Load(object sender, EventArgs e)
          {
              if (!IsPostBack)
              {
                  SqlDataSource SqlDataSource1 = new SqlDataSource();
                  SqlDataSource1.ID = "SqlDataSource1";
                  this.Page.Controls.Add(SqlDataSource1);
                  SqlDataSource1.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConID"].ConnectionString;
                  SqlDataSource1.SelectCommand = "SELECT caller_id, phone, name, email FROM callers WHERE client_id=@ClientID";
                  SqlDataSource1.SelectParameters.Add("ClientID",ClientID);
                  GridView1.DataSource = SqlDataSource1;
                  GridView1.DataBind();
              }
          }
          

          【讨论】:

            【解决方案7】:

            您可以通过 SqlDataSource 上的 Selecting 事件来解决它,我现在在这种控件中是多么令人沮丧!!!

            另一种选择是在表单中添加一个 HiddenField,SqlDataSource 可以从那里获取它的值。

            【讨论】:

              【解决方案8】:

              这是 VB 版本:

              Dim parameter As New System.Web.UI.WebControls.Parameter("ClientID", Data.DbType.Int32)
              parameter.DefaultValue = 45
              sqlTicketInfo.SelectParameters.Add(parameter)
              

              在 VB.NET 版本中,无法实际设置该值,因此我设置了默认值。如果该值未初始化,则使用默认值,因此由于我们无法设置该值,因此无论如何它都会自动使用默认值。

              【讨论】:

                猜你喜欢
                • 2012-06-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-02-05
                • 1970-01-01
                • 1970-01-01
                • 2012-12-22
                相关资源
                最近更新 更多