Parameters 使用sql的PetaPoco分页+;参数不工作

Parameters 使用sql的PetaPoco分页+;参数不工作,parameters,petapoco,Parameters,Petapoco,我在尝试返回带有SQL字符串+参数的分页查询(SQL Server)时遇到了一个关于PetaPoco的非常奇怪的问题。 如果我只使用一个普通的SQL字符串,它将按预期返回结果集。如果我使用带有@0参数的字符串,则不会返回结果集,即使我检查发出的SQL命令是否正确 这是一个问题 Dim query As PetaPoco.Sql = New PetaPoco.Sql("SELECT DISTINCT UserName FROM EVA_Users WHERE UserName LIKE '@0%'

我在尝试返回带有SQL字符串+参数的分页查询(SQL Server)时遇到了一个关于PetaPoco的非常奇怪的问题。 如果我只使用一个普通的SQL字符串,它将按预期返回结果集。如果我使用带有@0参数的字符串,则不会返回结果集,即使我检查发出的SQL命令是否正确

这是一个问题

Dim query As PetaPoco.Sql = New PetaPoco.Sql("SELECT DISTINCT UserName FROM EVA_Users WHERE UserName LIKE '@0%' ORDER BY UserName", filterSql)
Dim result As PetaPoco.Page(Of AutoCompleteUserName) = db.Page(Of AutoCompleteUserName)(1, rowsNumber, query)
这应该发出一个命令,将“filterSql”作为@0的字符串参数,非常简单,实际上为计数发出的SQL命令是:

SQL Command: SELECT COUNT(DISTINCT UserName) FROM EVA_Users WHERE UserName LIKE '@0%' -> @0 [String] = "tes"
对于帕金来说:

SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY UserName) peta_rn, peta_inner.* FROM (SELECT DISTINCT UserName FROM EVA_Users WHERE UserName LIKE '@0%' ) peta_inner) peta_paged WHERE peta_rn>@1 AND peta_rn<=@2 -> @0 [String] = "tes" -> @1 [Int64] = "0" -> @2 [Int64] = "10"
我还直接在查询中尝试了使用SQL字符串+参数的版本,但没有任何其他好处,即:

Dim result As PetaPoco.Page(Of AutoCompleteUserName) = db.Page(Of AutoCompleteUserName)(1, rowsNumber, query (with the @0 inside as a parameter), filterSql)
DTO AutoCompleteSer就是这个,它来自一个包含多个字段的表,我从中创建了这个DTO,只包含一个字段:

Imports PetaPoco

Namespace Eva.Entities.Core
<TableName("EVA_Users")> _
<PrimaryKey("", autoIncrement:=False)> _
<ExplicitColumns> _
<Serializable()> _
Partial Public Class AutoCompleteUserName
    Private mUserName As String
    <Column> _
    Public Property UserName As String
        Get
            Return mUserName
        End Get
        Set(value As String)
            mUserName = value
        End Set
    End Property
End Class
End Namespace
导入PetaPoco
命名空间Eva.Entities.Core
_
_
_
_
部分公共类AutoCompleteUserName
私有mUserName作为字符串
_
公共属性用户名作为字符串
得到
返回博物馆名称
结束
设置(值为字符串)
mUserName=值
端集
端属性
末级
结束命名空间
有什么提示吗?我希望使用参数化版本来不处理自己的sql注入场景。
提前感谢

您需要将
%
放在参数值中,而不是sql中。参数也不应该用单引号括起来。 例如

Imports PetaPoco

Namespace Eva.Entities.Core
<TableName("EVA_Users")> _
<PrimaryKey("", autoIncrement:=False)> _
<ExplicitColumns> _
<Serializable()> _
Partial Public Class AutoCompleteUserName
    Private mUserName As String
    <Column> _
    Public Property UserName As String
        Get
            Return mUserName
        End Get
        Set(value As String)
            mUserName = value
        End Set
    End Property
End Class
End Namespace
Dim query As PetaPoco.Sql = New PetaPoco.Sql("SELECT DISTINCT UserName 
    FROM EVA_Users WHERE UserName LIKE @0 ORDER BY UserName", filterSql + "%")
Dim result As PetaPoco.Page(Of AutoCompleteUserName) = 
    db.Page(Of AutoCompleteUserName)(1, rowsNumber, query)