2013-01-17 114 views
1

大家好! 如果有人能帮助我,我会非常高兴。全文查询返回无结果

我已经开发了一个C#和Sql Server 2008作为数据库的全文搜索引擎。 下面查询结果返回,当我在SSMS运行它,但是当我从C#代码与它的参数化形式运行它,它没有返回值:

SqlCommand cmd = new SqlCommand("SELECT distinct occurrence "+ 
           "FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, @doc)', 1033, 0, 0) "+ 
           "where display_term in "+ 
           "("+ 
            "SELECT display_term "+ 
            "FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, @searchterm)', 1033, 0, 0) "+ 
           ")",conn); 

      cmd.Parameters.Add("@searchterm",SqlDbType.VarChar); 
      cmd.Parameters["@searchterm"].Value = "distributed property"; 
      cmd.Parameters.Add("@doc", SqlDbType.VarChar); 
      cmd.Parameters["@doc"].Value = "in the search of distributed ways that are provided by properties"; 
      SqlDataReader dr = cmd.ExecuteReader(); 
+1

1)启动SQL Server设置2)运行你的应用程序,3)捕捉到准确的查询,4)调试在SQL Management Studio中 –

+0

你要为你的命令类型?我可以建议考虑一个存储过程吗? –

+0

@BrianP CommandType设置为默认值,即= CommandType.Text –

回答

0

是否与此帮助点破清除它有点之间的任何差别你的SQL代码中的VS代码?另外,请在创建查询时使用USING和ADDWITHVALUE。我不知道这是不是我,但我认为这是必须的。

using (SqlConnection con = new SqlConnection(conString)) 
{ 
    string command = string.Format({0}{1}{2}{3}{4}{5}, 
    "SELECT distinct occurrence ", 
    "FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, @doc)', 1033, 0, 0) ", 
    "where display_term in " 
    "(", 
    "SELECT display_term ", 
    "FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, @searchterm)', 1033, 0, 0) ", 
    ")") 
    using (SqlCommand cmd = new SqlCommand(command,conn)) 
    { 
     cmd.Parameters.AddWithValue("@searchterm", "distributed property"); 
     cmd.Parameters.AddWithValue("@doc", "in the search of distributed ways that are provided by properties"); 

     if (con.State != ConnectionState.Open) 
     { 
      con.Open(); 
     } 
     using (SqlDataReader dr = new SqlDataReader(cmd)) 
     { 
      if(dr.HasRows) 
      { 
       While(dr.Read()) 
       { 
        // Do stuff here... 
       } 
      } 
     } 
    } 
}