2012-06-26 34 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