热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c#调用sqlite3.dll中的sqlite3_prepare_v2函数出错

在c#中声明是[DllImport(sqlite3.dll,EntryPointsqlite3_prepare_v2,CallingConventionCallingConv
在c#中声明是

[DllImport("sqlite3.dll", EntryPoint = "sqlite3_prepare_v2", CallingConvention = CallingConvention.Cdecl)]
public static extern int sqlite3_prepare_v2(IntPtr db, string zSql, int nByte, out IntPtr ppStmpt, IntPtr pzTail);

当没有汉字时

query = "REPLACE into Train(cc,Sf,Fs,Zd,Ds) values('1010','1234','12:34','1010','02:41')";

是没有问题的,但是当使用汉字之后

query = "REPLACE into Train(cc,Sf,Fs,Zd,Ds) values('1010','济南','12:34','1010','02:41')";

调用

sqlite.sqllite.SQLite.sqlite3_prepare_v2(db, query, query.Length, out stmHandle, IntPtr.Zero) 

就会出错!我想把汉字插入该怎么处理?谢谢了

12 个解决方案

#1


sqlite3_prepare_v2
是否指定字符集

#2


引用 1 楼 ajaxtop 的回复:
sqlite3_prepare_v2
是否指定字符集
这个我也不清楚,我只是在往上下载的使用的,有谁清楚sqlite3.dll的使用的呀?

#3


有人会嘛?

#4


用 sqlite3_bind_text16
http://blog.csdn.net/a2619308/article/details/6830786

#5


引用 4 楼 sandy945 的回复:
用 sqlite3_bind_text16
http://blog.csdn.net/a2619308/article/details/6830786

在c#中怎么声明

int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));

#6


使用sqlite3_bind_text16可以插入了,但是在插入之后是乱码。。。

#7


你先用 utf-8 编码后存储

#8


引用 7 楼 sandy945 的回复:
你先用 utf-8 编码后存储

阿非,你好

UTF8Encoding utf8 = new UTF8Encoding();
Byte[] encodedBytes = utf8.GetBytes("济南");
String decodedString = utf8.GetString(encodedBytes);

if (sqlite.sqllite.SQLite.sqlite3_prepare_v2(db, query, query.Length, out stmHandle, IntPtr.Zero) != sqlite.sqllite.SQLite.SQLITE_OK)
{
  err = sqlite.sqllite.SQLite.sqlite3_errmsg(db);
}
if (sqlite.sqllite.SQLite.SQLITE_OK != sqlite.sqllite.SQLite.sqlite3_bind_text16(stmHandle, 1, decodedString, -1, IntPtr.Zero))
{
  err = sqlite.sqllite.SQLite.sqlite3_errmsg(db);
}


使用上面的代码之后还是乱码?请问怎么解决,谢谢了

#9


if(SQLITE_OK != sqlite3_bind_text16(lpdExcute,1,L"海马汽车",-1,SQLITE_STATIC))break;  
if(SQLITE_OK != sqlite3_bind_text(lpdExcute,2,"000572",-1,SQLITE_STATIC))break;  
--------------------
你可以搜索一下 L"海马汽车" 中的 L 是什么用途

这是中文和英文在存储时的区别

#10


该回复于2011-12-09 13:52:02被版主删除

#11


采用何种编码 和你打开时的编码也有关系

#12


sqlite3_bind_text函数:
int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));

C#声明:

public delegate void FPtr( IntPtr ptr);

DllImport("sqlite3.dll", EntryPoint = "sqlite3_bind_text", CallingConvention = CallingConvention.Cdecl)] 
public static extern int sqlite3_bind_text(IntPtr db,int num,string zSql, int nByte, FPtr fp); 



推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 利用空间换时间减少时间复杂度以及以C语言字符串处理为例减少空间复杂度
    在处理字符串的过程当中,通常情况下都会逐个遍历整个字符串数组,在多个字符串的处理中,处理不同,时间复杂度不同,这里通过利用空间换时间等不同方法,以字符串处理为例来讨论几种情况:1: ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • Summarize function is doing alignment without timezone ?
    Hi.Imtryingtogetsummarizefrom00:00otfirstdayofthismonthametric, ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
author-avatar
手机用户2602916737
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有