解决方法在 C# 中其实很简单,但网上尚未见有任何中文资料说这事,只有 C 方法。以下我是通过一英文网页学到的。
首先,定义和注入规则
示例代码如下,很简单无须多解释。只有一点必须注意,对同一个函数只能注入一次,不得重复,所以注入语句写在主函数中再合适不过。
static class Program { // 主函数 [STAThread] static void Main() { SQLiteFunction.RegisterFunction(typeof(SQLiteCollation_PinYin)); // 注入 Config.Reload(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); Config.Save(); } // 中文拼音比较规则 [SQLiteFunction(FuncType = FunctionType.Collation,Name = "PinYin")] class SQLiteCollation_PinYin: SQLiteFunction { public override int Compare(string x,string y) { return string.Compare(x,y); } } }
而后,使用
使用时, SQL 代码不能简单地写上 ORDER BY XXX 了事,还得用上 COLLATE ,示例如下:
SELECT * FROM Client_V ORDER BY City COLLATE PinYin,Unit COLLATE PinYin,Name COLLATE PinYin;COLLATE 便是指定规则, PinYin 便是上面 C# 代码中定义规则时的 Name = "PinYin" 。 另外,用建表、建立索引时,也应当考虑使用 COLLATE ,这样才能让数据库快起来。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。