我有一個字符串,它包含帶有Guid的常規SQL語句。該語句應該進行轉換,以便我可以針對無法處理Guid的本地SQLite數據庫運行它,如.NET框架所述。 因此,我必須將它們轉換爲它們的二進制表示形式,這意味着SQLite中的Guid(在SQL中)'00000000-0000-0000-0000-000000000000'將變爲X'0000000000000000000000000000'或'FE334797-0A46-468D-91F2- 0005F1EC67EC'將變成X'974733fe460a8d4691f20005f1ec67ec'。查找用正則表達式替換Guid與二進制等價物
到單一的Guid轉換的方法如下:
private static string GetBinaryGuid(Guid guidToConvert)
{
var guidBytes = guidToConvert.ToByteArray();
var guidBinary = new StringBuilder();
foreach (var guidByte in guidBytes)
{
guidBinary.AppendFormat(@"{0}", guidByte.ToString("x2"));
}
return guidBinary.ToString();
}
找到真正的Guid(S)的查詢字符串的方法是:
resultString = Regex.Replace(subjectString, @"\b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-F0-9]{12}\b", "'$0'", RegexOptions.IgnoreCase);
我的問題是如何用它們各自的二進制等價物替換字符串中的「真實」Guid(s)?
編輯:只是爲了澄清。我想獲取字符串中的所有Guid,將找到的Guid傳遞給上面提到的方法,並在字符串中替換它。 結果應該是帶有二進制Guid(s)的SQL查詢,如果在字符串中找到的話。
EDIT2:
SELECT * FROM table WHERE Id = 'FE334797-0A46-468D-91F2-0005F1EC67EC'
應該成爲
SELECT * FROM table WHERE Id = X'974733fe460a8d4691f20005f1ec67ec'
EDIT3:
@aelor讓我正確的方向。 對於我的具體情況,可以找到解決方案here。
SQL字符串是完全隨意的,還是會始終以某種已知的形式? – eggyal
否。查詢字符串可以包含任意數量的Guid(s)。甚至沒有 – KingKerosin
爲什麼不簡單地將GUID存儲爲字符串?除了節省少量的存儲空間之外,轉換爲二進制形式存儲有什麼好處(大概只有在數據檢索時才轉換回字符串形式)?如果你絕對*必須*轉換數據,爲什麼不在SQLite中這樣做(例如,使用觸發器來寫入和讀取視圖)? – eggyal