我正在使用MySQL文档存储,我无法弄清楚如何在查找语句中正确转义带有特殊字符的字符串。
Visual C#2015 Connector / NET:8.0.8.0
var realmName = "Aman'Thul";
var realm = collection.Find("Name = :name")
.Bind("name", realmName).Limit(1).Execute().FetchOne();
=> System.ArgumentException: Unterminated string starting at 4
问题显然是撇号,但其他特殊字符和#34;像括号,连字符等。
版本#2:
var realmName = "Aman''Thul";
var realm = collection.Find("Name = :realmName").Bind("realmName", realmName).Limit(1).Execute().FetchOne();
=> System.ArgumentException: Only 1 tokens consumed, out of 3
版本#3:
var realmName = "Aman\\'Thul";
var realm = collection.Find("Name = :realmName").Bind("realmName", realmName).Limit(1).Execute().FetchOne();
=> System.ArgumentException: Can't parse at pos: 4
此时我没有想法。正确地逃避这些表达的正确方法是什么?必须有一些我似乎无法找到的通用解决方案,因为有关MySQL文档存储的信息很少。
答案 0 :(得分:1)
正如评论中所讨论的那样 - 您似乎需要自己将字词包装在字符串文字中,因为它不会自动执行此操作。它可以逃避该字符串的内容,因此不需要为了MySQL原因而逃避任何事情,只能逃避C#的原因。像这样:
var realmName = "\"Aman'Thul\"";