[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
这个我也不清楚,我只是在往上下载的使用的,有谁清楚sqlite3.dll的使用的呀?
#3
有人会嘛?
#5
在c#中怎么声明
int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
#6
使用sqlite3_bind_text16可以插入了,但是在插入之后是乱码。。。
#7
你先用 utf-8 编码后存储
#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 是什么用途
这是中文和英文在存储时的区别
if(SQLITE_OK != sqlite3_bind_text(lpdExcute,2,"000572",-1,SQLITE_STATIC))break;
--------------------
你可以搜索一下 L"海马汽车" 中的 L 是什么用途
这是中文和英文在存储时的区别
#10
#11
采用何种编码 和你打开时的编码也有关系
#12
sqlite3_bind_text函数:
int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
C#声明:
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);
#1
sqlite3_prepare_v2
是否指定字符集
是否指定字符集
#2
这个我也不清楚,我只是在往上下载的使用的,有谁清楚sqlite3.dll的使用的呀?
#3
有人会嘛?
#4
用 sqlite3_bind_text16
http://blog.csdn.net/a2619308/article/details/6830786
http://blog.csdn.net/a2619308/article/details/6830786
#5
在c#中怎么声明
int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
#6
使用sqlite3_bind_text16可以插入了,但是在插入之后是乱码。。。
#7
你先用 utf-8 编码后存储
#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 是什么用途
这是中文和英文在存储时的区别
if(SQLITE_OK != sqlite3_bind_text(lpdExcute,2,"000572",-1,SQLITE_STATIC))break;
--------------------
你可以搜索一下 L"海马汽车" 中的 L 是什么用途
这是中文和英文在存储时的区别
#10
#11
采用何种编码 和你打开时的编码也有关系
#12
sqlite3_bind_text函数:
int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
C#声明:
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);