2012-06-26 50 views
0

我已经阅读了许多类似的问题,但答案根本无效。在sql select * from HelloRow('o')中运行此函数将不会返回任何行。正在运行HelloRow('one')将返回名称为“one”的行。 fillrow方法不会做任何事情(只是读取字符串)。t-sql命令参数通配符

[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "HelloFillRow", DataAccess = DataAccessKind.Read, TableDefinition="message nchar(20)")] 
public static IEnumerable HelloQuery(SqlString like) 
{ 
    ArrayList resultCollection = new ArrayList(); 

    using (SqlConnection connection = new SqlConnection("context connection=true")) 
    { 
     connection.Open(); 

     using (SqlCommand select = new SqlCommand(
      "select name from test where name like @par" 
      , connection)) 
     { 
      select.Parameters.Add("par", SqlDbType.NChar, 10).Value = like + "%"; 
      using (SqlDataReader selectReader = select.ExecuteReader()) 
      { 
       while (selectReader.Read()) 
       { 
        SqlString nextName = selectReader.GetString(0); 
        resultCollection.Add(nextName.ToString()); 
       } 
      } 
     } 
    } 
    return resultCollection; 
} 
+1

相当肯定的问题是'NChar' VS'NVarchar' –

+0

你想要一个字符串匹配?在这种情况下,你需要用百分号包装'like',而不是只有一个。 – bluevector

+0

我注意到你正在将你的参数作为'par'加入你的命令中,而不是'@par'。我认为这会导致一个问题,但是你声称用'one'来调用你的函数确实有效...... –

回答

5

更改命令文本:

select name from test where name like @par + '%' 

,并添加参数这样:

select.Parameters.Add("par", SqlDbType.NVarChar, 10).Value = like; 
+0

谁投降,请解释 – Dimitri

+0

问题是固定长度参数类型的尾随空格。 –

+0

编辑的回复显示NVarChar – Dimitri