2017-10-06 94 views
0

所以我想從那裏Id in (value,value1,value2)的SQLite選擇其中ID的GUID

哪裏value是使用這個答案類型Guid

選擇表中的所有值:Using guid in sqlite select where guid is stored in the sqlite db as binaries

我創建這個SQL聲明:

Select * 
from [Imaging.ImageTag] 
where ImageId in (X'b06783c2-da62-4292-8bdc-f7915c00b2db', 
        X'9bc10d55-661b-4530-b224-3fe32651cb74', 
        X'0404c0c1-65a0-4913-9e36-fd9d3e129783', 
        X'cd41ac25-9b75-4d14-bd6b-38e56013020a', 
        X'122014a5-f8bd-4c0b-8c95-b9eec4b60e7e', 
        X'fa4bad5d-42b2-40fa-bf78-4942f29f6355', 
        X'3938b974-d174-4492-9d3b-68733bef9a14', 
        X'b8ac27c4-125f-4fa9-bc91-c6c7fb83c33c', 
        X'0e10bd73-4254-4614-a112-031ce0a3d526', 
        X'd2979e7c-1cb0-40cb-9898-c57d2f4a083a', 
        X'04251d49-9cd8-40d8-9c43-a17a325ddd4b', 
        X'44e56e78-94ce-4308-815d-7d95acae6904', 
        X'481c95d1-52f7-4331-a0f0-a2754dba87f5' 
       ) 

但我得到的錯誤:

unrecognized token: "X'b06783c2-da62-4292-8bdc-f7915c00b2db'"

+0

請問如果刪除了'-'符號工作?即:'X'b06783c2da6242928bdcf7915c00b2db'' – Igor

+0

@Igor我認爲這可能是它,但我測試了它,它返回0行。 (雖然沒有拋出異常),但看起來不是那麼奏效 – user1

+0

如果它返回了0行,並且沒有產生錯誤,那麼這是正確的語法,但是從列表中只有/沒有匹配。 – Igor

回答

0

好吧我想通了。

有作爲sqlite的一個Guid沒有這樣的東西,所以它被存儲爲blob這意味着當你想查詢一個給定Guid您需要將您的GUID轉換爲GuidHexidecimal string表示爲Byte array

要做到這一點在C#我的代碼:

query = string.Format("Select * from [TableName] where ImageId in (x'{0}')", string.Join("',x'", ids.Select(x => SqliteDatabaseExtensions.ByteArrayToString(x.ToByteArray()))); 

其中idsList<Guid>

在這個最重要的一點是:

SqliteDatabaseExtensions.ByteArrayToString(new Guid(x.ToString()).ToByteArray()) 

凡靜態方法是:

private static string ByteArrayToString(byte[] ba) 
{ 
    StringBuilder hex = new StringBuilder(ba.Length * 2); 
    foreach (byte b in ba) 
     hex.AppendFormat("{0:x2}", b); 
    return hex.ToString(); 
} 
+0

當你有一個字節數組,你可以直接使用它作爲blob參數。 –