【问题标题】:How to pass "%" as part of a parameter to a SqlCommand?如何将“%”作为参数的一部分传递给 SqlCommand?
【发布时间】:2013-09-12 16:29:49
【问题描述】:

当使用SqlDataSource 时,它是这样制作的:

SqlDataSource1.SelectCommand = "SELECT field,field FROM TABLE WHERE name LIKE @name"
SqlDataSource1.SelectParameters.Clear()
SqlDataSource1.SelectParameters.Add( _
            New Parameter("name", DbType.String, "%" + TextBox1.Text + "%"))

但如果我尝试:

command.Parameters.Add( _
    New Parameter("name", SqlDbType.VarChar, "%" + TextBox1.Text + "%"))

command.Parameters.Add(New Parameter("name", DbType.String, "%" + TextBox1.Text + "%"))

它失败了。 SqlCommand怎么办?

【问题讨论】:

    标签: vb.net parameter-passing sqlcommand


    【解决方案1】:

    尝试像这样构造你的 sql 语句:

    SELECT field,field FROM TABLE WHERE name LIKE N'%' + @name + N'%'
    

    生成的 VB 如下所示:

    SqlDataSource1.SelectCommand = "SELECT field,field FROM TABLE WHERE name LIKE N'%' + @name + N'%'"
    SqlDataSource1.SelectParameters.Clear()
    SqlDataSource1.SelectParameters.Add("@Name", SqlDbType.NVarChar, 50).Value = TextBox1.Text
    

    【讨论】:

    • 我真的很好奇为什么N'%' 而不仅仅是'%'
    • @DonThomasBoyle 我假设name 列是 NVarChar 类型,而不仅仅是 Varchar(如果不是,它可能应该是)。如果您没有N,则生成的字符串文字的类型是 varchar,当将它与字符串的其余部分组合时,Sql Server 必须做额外的工作才能将其转换为 NVarchar。在最坏的情况下,缺少 N 会导致类型不匹配,从而阻止 sql server 使用索引,从而导致性能显着下降。在这种情况下,初始通配符已经破坏了索引,因此任何差异都可能很小。
    【解决方案2】:

    尝试以其他方式添加参数

    Command.Parameters.Add("@Name", SqlDbType.VarChar).Value = "%" & TextBox1.Text & "%"
    

    为了不引起任何问题,请尝试使用 & 而不是 +。并不是说我可以确定 % 被认为是一个数字或心律失常状况,但似乎可以解释为Here,嗯。

    【讨论】:

    • 我也更喜欢重载.Add(),但对于这个问题,它与已经不适合他的问题并没有什么不同。
    • 是的,尤其是在运营商中,这也是经过测试并适用于我的。
    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2014-06-14
    • 2012-04-20
    • 2014-11-03
    相关资源
    最近更新 更多