开发环境:.NET
开发语言:C#
情景:新建的智能设备项目,目标平台是WinCE。这里用到了SQLite 1.0.76.0版本组件,但是出现一个问题:在语句if (conn.State != ConnectionState.Open)出出现异常,异常提示为:MissingMethodException。猜想可能是这个属性有问题,于是干脆直接注释掉这个判断,直接运行conn.Open();可是这句还以一样的异常提示。难道真的是这个方法已经被取消了还是怎么了?我直接在监视窗口中输入conn.State,发现他是Closed值,然后直接输入ConnectionState.Open,没有值,提示说类型“System.Data.ConnectionState”同时存在于“System.Data.dll”和“System.Data.dll”中,那我就不明白了,是不是SQLite包含或引用了这个名称的组件并且和系统的这个组件不是同一个导致的问题呢?
答:网上搜到的解决方案是:
引用的dll用官网下的zip包里面的dll,不要用exe安装程序安装后的安装目录下的那个,不好说它有没有问题反正我是这样解决的:
直接在安装目录下(C:\Program Files\SQLite.NET\bin)把文件夹CompactFramework直接拷贝到我的设备中(WinCE环境),运行testce.exe报异常,然后登了几秒才自动结束程序;
然后我直接把下载下来的压缩包(SQLite-1.0.66.0-binaries.zip)解压(F:\Download\SQLite\SQLite-1.0.66.0-binaries)并把里面的bin文件夹下的CompactFramework文件夹整个拷贝到我的设备中,运行testce.exe正常,显示的文本中有创建数据库啊表之类的(不方便截图,反正能正常运行);
最后我把这个文件夹中的System.Data.SQLite.dll组件直接拷贝到我的程序目录覆盖原来那个(原来这个是由电脑上安装目录下添加的)中,运行,OK。
嘿嘿,解释不了原因,但是这个问题算是解决了。
我试过的方法是:
有两个文件SQLite.Interop.DLL和System.Data.SQLite.dll 。该项目下所有版本是1.0.74.0 换成1.0.66.0。而这两个文件在安装的D:\Program Files\SQLite.NET\bin\CompactFramework目录下有把SQLite.Interop.066.DLL中的“.066”去掉即可。记的要把项目下的所有都替换掉。这样问题就解决了~