none
用LINQ取到值後,透過該值查詢不到資料 RRS feed

  • 問題

  • 前輩好,

    最近剛學LINQ,所以有些觀念不是很熟,還請前輩指點,

    今天用LINQ去查詢XML,取得FileID

       string FileID = "";
    
       if ((xmlDocRequest.Element("TestXML").Element("TestXMLInner").Element("FileID") != null))
       {
            var Linq_FileID = from p in xmlDocRequest.Element("TestXML").Element("TestXMLInner").Elements("FileID")
                              select p;
    
            foreach (var L in Linq_FileID)
            {
                  FileID += "'" + L.Value.ToString() + "',";
             }
             FileID = FileID.Substring(0, FileID.Length - 1);
       }

    以上的程式碼是能取得FileID,

    但是於參數化查詢時無法查詢到資料,都是回傳一個空Table給我

    strSql = string.Format(@"Select distinct * From FileTable Where FileTable.CaseID = @CaseID And FileTable.RepNo = @RepNo And DetailNo = @LapID And FileID in (@FileID)"); Parameters.Add(new SqlParameter(string.Format("@{0}", "LapID"), LapID)); Parameters.Add(new SqlParameter(string.Format("@{0}", "FileID"), FileID));

    ..

    如果使用一般抓法就抓的到資料,

    例如 

    FileID = xmlDocRequest.Element("TestXML").Element("TestXMLInner").Element("FileID").Value

    若FileID不用參數化查詢也可以查到資料,

    不知道這是什麼原因,關鍵字不知道該怎麼下,

    希望前輩解惑,謝謝

    2017年12月8日 下午 12:10

解答

  • LINQ的字串常數要用雙引號包起來才對, 不是用單引號, 如果有取到值, 應該會成功
    • 已編輯 tihsMVP 2017年12月10日 上午 12:47
    • 已標示為解答 HumorA 2017年12月11日 上午 01:00
    • 已取消標示為解答 HumorA 2017年12月11日 上午 01:00
    • 已標示為解答 HumorA 2017年12月11日 上午 01:00
    2017年12月10日 上午 12:47

所有回覆

  • 您可以先用偵錯工具檢查一下, 跑完以下的程式碼後, FileID變數的內容是什麼? 檢查FileID的內容是否正確?

     FileID = FileID.Substring(0, FileID.Length - 1);


    • 已編輯 tihsMVP 2017年12月9日 上午 02:26
    2017年12月9日 上午 02:25
  • 抓到的值為正確的。

    我有在Debug模式下,看取到的值還有參數化查詢時的語法,並有將取到的值和查詢字串直接於SQLManagement下進行查詢

    我先將查詢字串貼上SQLManagement,再將收到的參數值複製貼上取代@FileID和@LapID的部分,也是可以取到值的。

    目前看到的差別只有 LapID、RepNo帶的參數沒有加上單引號

    而FileID每個值都有用單引號包住,嘗試過沒包,但沒包的話會回錯誤訊息給我。

    目前是

    若查詢條件不加FileID 可查到資料

    若FileID沒參數化查詢 可查到資料

    若FileID透過一般方法不用LINQ的方式取值,也可查到資料,如下

    FileID = xmlDocRequest.Element("TestXML").Element("TestXMLInner").Element("FileID").Value

    但若是透過Linq取到的,並且透過參數化查詢,那就查不到任何東西。

    有在Debug模式下看到值,但看起來是正確的,透過那些值直接去資料庫中可查到資料。

    目前改成用非Linq的方法去查資料,但還是想知道原因,謝謝前輩。



    • 已編輯 HumorA 2017年12月9日 上午 09:37 打錯字
    2017年12月9日 上午 09:37
  • LINQ的字串常數要用雙引號包起來才對, 不是用單引號, 如果有取到值, 應該會成功
    • 已編輯 tihsMVP 2017年12月10日 上午 12:47
    • 已標示為解答 HumorA 2017年12月11日 上午 01:00
    • 已取消標示為解答 HumorA 2017年12月11日 上午 01:00
    • 已標示為解答 HumorA 2017年12月11日 上午 01:00
    2017年12月10日 上午 12:47
  • 對不起後來發現是我觀念有問題,

    如果要在查詢字串中用in的話,

    in裡面的每一個值,都要宣告一個@

    我參考了這篇文章 How to pass sqlparameter to IN()?

    抱歉觀念有問題,浪費前輩的時間了

    2017年12月11日 上午 01:05