C# 将带参数的稳定查询包含到Repeater中

C# 将带参数的稳定查询包含到Repeater中,c#,sql-server,C#,Sql Server,我觉得我很慢,我有一个疑问: 选择K.RANK、physicalName、DocText、FileType 以文档形式从文档中删除 内部连接是稳定的 文档,DocText,“ISABOUT页面权重0.7” 作为K 关于Docs.DocumentID=K[键] 按K.RANK排序; 它在MSSQL中工作,如果我这样做,中继器将充满: SqlCommand objCommand = new SqlCommand("SELECT K.RANK, physicalName, DocText, FileT

我觉得我很慢,我有一个疑问:

选择K.RANK、physicalName、DocText、FileType 以文档形式从文档中删除 内部连接是稳定的 文档,DocText,“ISABOUT页面权重0.7” 作为K 关于Docs.DocumentID=K[键] 按K.RANK排序; 它在MSSQL中工作,如果我这样做,中继器将充满:

SqlCommand objCommand = new SqlCommand("SELECT K.RANK, physicalName, DocText, FileType FROM Documents AS Docs INNER JOIN CONTAINSTABLE(Documents,DocText, 'ISABOUT ( pages Weight(0.7)                     )') AS K         ON Docs.DocumentID = K.[KEY]         ORDER BY K.RANK", objConn);
但当我尝试用参数替换搜索文本时,它不会给出任何结果:

SqlCommand objCommand = new SqlCommand("SELECT K.RANK, physicalName, DocText, FileType FROM Documents AS Docs INNER JOIN CONTAINSTABLE(Documents,DocText, 'ISABOUT ( @SearchParams                         )') AS K         ON Docs.DocumentID = K.[KEY]         ORDER BY K.RANK", objConn);
        objCommand.Parameters.AddWithValue("@SearchParams", "pages Weight(0.7)");

我做错了什么?

整个搜索条件可以参数化:

SqlCommand objCommand = 
    new SqlCommand("SELECT K.RANK, physicalName, DocText, FileType FROM Documents AS Docs     
    INNER JOIN 
    CONTAINSTABLE(Documents,DocText, @SearchCondition) AS K 
    ON Docs.DocumentID = K.[KEY] ORDER BY K.RANK", objConn);

    objCommand.Parameters.AddWithValue("@SearchParams", "ISABOUT (pages Weight(0.7))");
编辑1:AddWithValue应避免,因为它会产生计划缓存污染。请阅读这篇有关SQL Server性能的文章。相反,我将使用Add方法cmd.Parameters.Add

+


这里似乎不能使用参数。手动构造搜索子句。当用户输入更多的单词,而您希望通过这些单词而不是句子进行搜索时,您也必须这样做。我的目的是解析输入并将其转换为单个搜索词。因此,如果输入的搜索结果是这样的。我将生成一个字符串搜索权重0.5,这个权重为0.5。我也有点担心使用带有用户inputI的非参数化查询。我已经编辑了你的标题。请看,如果共识是否定的,他们就不应该这样做。谢谢你,刚刚测试成功!有没有办法找到一些文档?知道哪些可以参数化,哪些不可以参数化?@jimmy:一般来说,对象名称/标识符示例:DB的名称、表的名称、列的名称不能参数化。而且,在某些情况下,某些内置函数的参数无法参数化。例如:。@jimmy:我添加了一个关于AddWithValue使用对SQL Server性能影响的说明。