原来想过用SQL Server Compact的,不过他好像字段限制比较死,最多8000,大点的图片都存不了啊。
所以改用sqlite。我下了《孜孜不倦的程序员:SQLite 内幕》的代码。下面是他什么dll函数的代码。
...
[DllImport("sqlite3.dll", EntryPoint = "sqlite3_open")]
static extern int sqlite3_open(string filename, out IntPtr db);
[DllImport("sqlite3.dll", EntryPoint = "sqlite3_close")]
static extern int sqlite3_close(IntPtr db);
[DllImport("sqlite3.dll", EntryPoint = "sqlite3_prepare_v2")]
static extern int sqlite3_prepare_v2(IntPtr db, string zSql,
int nByte, out IntPtr ppStmpt, IntPtr pzTail);
[DllImport("sqlite3.dll", EntryPoint = "sqlite3_step")]
static extern int sqlite3_step(IntPtr stmHandle);
...
这样当我调用sqlite3_open时,总是报调用“导致堆栈不对称,PInvoke签名与非托管的目标签名不匹配”。
如果我强行执行,其实数据库还是能建立的,也能建表。很奇怪。
不知道如何解决,请大家帮帮忙。
3 个解决方案
#1
能用就行...我用wpf经常报些奇怪的错误但都还能用。。
#2
关键就是不能用啊,老是弹出这样的对话框谁会用这样的软件啊。而且如果在release版本直接就退出了。
#3
[DllImport("sqlite3.dll", EntryPoint = "sqlite3_open", CallingConvention =System.Runtime.InteropServices.CallingConvention.Cdecl)]
public static extern int sqlite3_open(string filename, out IntPtr db);
public static extern int sqlite3_open(string filename, out IntPtr db);
#1
能用就行...我用wpf经常报些奇怪的错误但都还能用。。
#2
关键就是不能用啊,老是弹出这样的对话框谁会用这样的软件啊。而且如果在release版本直接就退出了。
#3
[DllImport("sqlite3.dll", EntryPoint = "sqlite3_open", CallingConvention =System.Runtime.InteropServices.CallingConvention.Cdecl)]
public static extern int sqlite3_open(string filename, out IntPtr db);
public static extern int sqlite3_open(string filename, out IntPtr db);