windows store apps开发使用SQLite-net 查询语句中文乱码问题

查询英文又会出问题,正在解决中已解决

情况是这样:1.表名含有中文,或者查询条件含中文时,查询时会返回Unrecognized token +中文乱码

                        2.使用parameter时,不会将?替换

搜索了很久,大多数是教你怎么添加sqlite runtime for win8 插件,怎么添加sqlite-net驱动,千篇一律,中文的和老外的差不多

然后参考安卓对付乱码的方法,把字符串转为utf-8,还是不行,感觉本来字符就是utf-8的。

仔细思考,首先肯定不是查询语句的utf-8问题,其次不会是sqlite的问题,因为数据库是我在另一程序中用System.Data.Sqlite生成的,含中文表名,在SQLiteSpy中显示正常。

考虑可能是1.sqlite runtime for win8不支持中文 2.sqlite-net驱动问题

到了今天早上,不甘心又仔细搜索,终于找到了这篇帖子http://bbs.csdn.net/topics/390254870,找到了解决办法得意,看来还是我知识太浅,还要多加学习

下面把方法贴出来

在 sqlite.cs 类中

添加

 [DllImport("sqlite3", EntryPoint = "sqlite3_prepare16_v2", CallingConvention = CallingConvention.Cdecl)]
        public static extern Result Prepare16_2(IntPtr db, [MarshalAs(UnmanagedType.LPWStr)] string sql, int numBytes, out IntPtr stmt, IntPtr pzTail);



把默认的

public static IntPtr Prepare2(IntPtr db, string query)
        {
            IntPtr stmt;
            var r = Prepare_2(db, query, query.Length, out stmt, IntPtr.Zero);
            if (r != Result.OK)
            {
                throw SQLiteException.New(r, GetErrmsg(db));
            }
            return stmt;
        }


改为
        public static IntPtr Prepare2(IntPtr db, string query)
        {
            IntPtr stmt;
            int num = System.Text.Encoding.Unicode.GetByteCount(query);
            var r = Prepare16_2(db, query, num, out stmt, IntPtr.Zero);
            if (r != Result.OK)
            {
                throw SQLiteException.New(r, GetErrmsg(db));
            }
            return stmt;
        }


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值