2012-01-06 60 views
1

得到錯誤在獲取數據從DataTable的選擇方法,我用下面的代碼使用「贊」操作

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如果發現這個 通配符

無論是*和%可以在LIKE比較中互換使用通配符。如果LIKE子句中的字符串包含*或%,則應將這些字符括在括號([])中。如果括號中有括號,則每個括號字符應該括在括號內(例如[[]或[]])。通配符在模式的開始和結束處,模式的結尾或模式的開始處都是允許的。例如:

「ITEMNAME LIKE '產品'」

「ITEMNAME LIKE '*產品'」

「ITEMNAME LIKE '產品*'」

通配符不允許一個字符串的中間。例如,'te * xt'是不允許的。

回答

2

你需要逃離「%」使用Like運算符時

//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 2012-01-06 06:43:43

+0

對不起,沒有工作 – Abhi 2012-01-06 06:54:51

0

我替換爲一個

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

這個固定了錯誤的路線,但林不知道這種方法是否是對不對