【问题标题】:How to use parameterized queries in SqlDataSource.SelectCommand in code behind?如何在后面的代码中使用 SqlDataSource.SelectCommand 中的参数化查询?
【发布时间】:2016-03-21 17:02:53
【问题描述】:

我有一个代码隐藏方法,它使用 SqlDataSource 对象从数据库中检索数据,然后用作我的网格视图的数据源来显示记录。我需要有条件地向我的 SelectCommand 查询的 WHERE 子句添加另一个条件,并且需要通过参数将数据传递给查询。我该怎么做?

SqlDataSource sds = new SqlDataSource();

sds.SelectCommand = "Select CustomerName, LoanNumber, LoanDate FROM Loan WHERE IsActive = 1 ";

if (filterRecord != "All") {   // DDL filter on page, all records by default
    sds.SelectCommand += "AND LoanType = ??";   //this is where I need to parameterize my query
}

我想像

if (filterRecord != "All") {  
    sds.SelectCommand += "AND LoanType = @LoanType";
    sds.SelectParameters.Add("@LoanType", "Mortgage");
}

但这似乎不起作用。

【问题讨论】:

  • But that does not appear to work. 什么不起作用?有例外吗?
  • 它说“必须声明标量变量“@LoanType”。
  • 您使用的是LoanType = ?? 还是LoanType = @LoanType
  • 我正在使用 LoanType = @LoanType。第一个例子只是暗示我不知道该放什么
  • 不应该是sds.SelectParameters.AddWithValue吗?

标签: c# parameterized-query


【解决方案1】:

我建议切换到 SqlCommand 对象来定义您的查询并使用 SqlDataReader 对象读取记录。您可以使用类似于以下内容的方式向查询中添加参数:

SqlCommand cmd = new SqlCommand(queryString, connection);
cmd.Parameters.AddWithValue("@paramName", value);

之后,您可以像往常一样将 SqlDataReader 绑定到网格视图,方法是将其声明为数据源。

【讨论】:

  • 谢谢。这实际上就是我最终所做的。我永远无法弄清楚如何将参数添加到 SqlDataSource
【解决方案2】:

我不认为您正在使用数据源对象:

向 SQL 数据源添加 ASP 参数:

<asp:Parameter Name="LoanType" Type="String" DefaultValue="default" />

将选择命令改为:

"Select CustomerName, LoanNumber, LoanDate FROM Loan WHERE IsActive = 1 AND (@LoanType="default" or LoanType =@LoanType)"

然后在你的代码后面这样做:

if (filterRecord != "All") {  
    sds.SelectParameters("LoanType").DefaultValue="Mortgage"
}

说明: 在后面的代码中编辑之前,您需要在 ASP webform 中定义 sql 参数。我用虚拟值“默认”定义了一个参数。因此,如果您不更改参数后面的代码中的参数 @LoanType 等于“默认”字符串,并且 @LoanType="default" 将为所有行返回 true,并且不会考虑 LoanType =@LoanType。 但是,如果您更改 @LoanType="default" 后面的代码中的参数,则返回 false,它将检查每一行的 LoanType=@LoanType,这将产生您想要的结果!

我的旧答案: 当您不使用 sql 数据源并且您正在使用 sql 命令时,这是很好的

if (filterRecord != "All") {  
    SqlParameter Parameter = new SqlParameter();
    Parameter.ParameterName = "@LoanType";
    Parameter.SourceColumn = "LoanType";
    Parameter.SqlDbType = SqlDbType.NVarChar;
    Parameter.Value = "Mortgage";

    sds.SelectCommand += "AND LoanType = @LoanType";
    sds.SelectParameters.Add(Parameter);
}

【讨论】:

  • 我也在后面的代码中使用 SQLDataSource,而不是在 aspx 页面上。有什么建议吗?
  • 好的。我改变了答案。检查新的
猜你喜欢
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
相关资源
最近更新 更多