【问题标题】:Adding parameters with sqlcommand.parameters.addwithvalue使用 sqlcommand.parameters.addwithvalue 添加参数
【发布时间】:2014-02-18 17:29:03
【问题描述】:

我无法从以下代码中得到任何响应:

using (SqlCommand cmd = new SqlCommand(@"SELECT * FROM users WHERE @parameter LIKE @value", con))
{
    cmd.Parameters.AddWithValue("parameter", parameter);
    cmd.Parameters.AddWithValue("value", value);

    SqlDataReader result = cmd.ExecuteReader();

    return result.HasRows;
}

每次都是假的。

有人知道为什么吗?

【问题讨论】:

  • 首先,SQL Server 参数有一个您没有提供的前导 @。但更重要的是 - 你不能为列名传递参数 - 如果你想这样做,你需要使用 dynamic SQL (尽管它的所有缺点,疣和陷阱)

标签: c# asp.net sql sqlcommand


【解决方案1】:

这是不正确的 SQL 语法

SELECT * FROM users WHERE @parameter LIKE @value

应该是这样的

SELECT * FROM users WHERE parameter = @parameter LIKE @value

并添加 LIKE 参数这样做

cmd.Parameters.AddWithValue("@value","%" + value + "%");

【讨论】:

    【解决方案2】:

    cmd.Parameters.AddWithValue("parameter", parameter);

    SqlCommand 将推断parameter 是一个字符串,因此将引用它导致:

    SELECT * FROM users WHERE 'xxx' LIKE 'yyy'
    

    这将是错误的。

    通过(已清理的)string.format/concatenation 添加字段名称。

    【讨论】:

    • 感谢您的评论。有什么优雅的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2019-07-04
    • 2012-05-01
    • 2010-10-03
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多