2012-01-06 5 views
1

「のように」私は、次のコードこの ワイルドカード文字が</p> <p>を発見した場合はオペレータ

foreach (KeyValuePair<string, string> kvp in letGrdSignList) 
       { 
        //Check if added function in definition is modified, if yes then don't add it in signature list 
        DataRow[] dLetRow = dtLet.Select("Definition" + "Like"" + "'" + 
         "%"+ kvp.Value + "%" + "'"); 
        //kvp.value contains "local:try2values($arg1 as xs:decimal,$arg2 as xs:float*)"  
        //Above line results in error 

        if (dLetRow.Length > 0) 
        { 
         //Check if signature already exists 
         if (!strList.ContainsKey(kvp.Key)) 
          strList.Add(kvp.Key, kvp.Value); 
        } 
        //else 
        // //Remove from list if signature is not present in any defination column 
        // letGrdSignList.Remove(sLetSignature);ss 
       } 


I am getting following error 
{System.Data.EvaluateException: Error in Like operator: the string pattern '%local:try2values($arg1 as xs:decimal,$arg2 as xs:float*)%' is invalid. 
    at System.Data.LikeNode.AnalyzePattern(String pat) 
    at System.Data.LikeNode.Eval(DataRow row, DataRowVersion version) 
    at System.Data.Select.AcceptRecord(Int32 record) 
    at System.Data.Select.GetLinearFilteredRows(Range range) 
    at System.Data.Select.SelectRows() 
    at System.Data.DataTable.Select(String filterExpression) 
    at WPFApp.QueryGenerator.GetSignatureList() 

MSDNからコード

のスクリーンショットを使用しています使用したDataTableのSelectメソッドからのデータのフェッチ中にエラーを取得両*と%は、LIKE比較でワイルドカード文字と同じ意味で使用できます。 LIKE句の文字列に*または%が含まれている場合、それらの文字はかっこ([])で囲む必要があります。括弧が句に含まれる場合、各括弧文字は角括弧([[]] [[]]など)で囲む必要があります。ワイルドカードは、パターンの始まりと終わり、またはパターンの終わり、またはパターンの始まりに使用できます。たとえば:

"ItemNameのLIKE '製品'"

"ItemNameのLIKE '*製品'"

"ItemNameのLIKE '製品*"' は

ワイルドカード文字はでは許可されません文字列の真ん中。たとえば、 'te * xt'は許可されません。

答えて

2

あなたが、私はこれはバグを固定しますが、アプローチがあるかどうかイムわからないこの1

DataRow[] dLetRow = dtLet.Select("Definition" + "Like"" + "'" + 
         "%"+ kvp.Value.replace("*","[*]") + "%" + "'"); 

で行を置き換えオペレータ

//Check if added function in definition is modified, if yes then don't add it in signature list 
    DataRow[] dLetRow = dtLet. 
     Select("Definition Like '[%]%" + kvp.Value + "[%]%'"); 
+0

ちょっとありがとう、私も同様のことをして、コードがうまく動いている、私はちょうどこのアプローチが正しいかどうかを確認したい – Abhi

+0

申し訳ありません – Abhi

0

のように使用している場合、「%」をエスケープする必要があります右かどうか

関連する問題