c# + sqlite 出错!!!File opened that is not a database file
file is encrypted or is not a database和以前一样的写,怎么这次就是不行啊!!!我快不行了,大家帮帮我啊!!!

解决方案 »

  1.   

    见过一篇文章是说这个错误好像是把密码去掉的原因,解决方案如下:1.       可以使用SQLiteConnectionStringBuilder类构建链接字符串,然后转换为string赋给SQLiteConnection的ConnectionString属性,密码没有就别写成””了。2.       在构造SQLiteConnection时直接用连接字符串,格式为”Data Source=xxx;Password=xxx”;其中密码部分可以在setPassword方法中设置。3.       修改密码使用SQLiteConnection的changePassword方法,需在数据库打开之后。整文如下:

    连接部分深入测试现在来点自己的测试。这次就不能再创建数据库了吧,别把刚才的给盖了。好的,开始,把创建数据库文件和添加表那一部分删除。先直接运行,有四条记录了。说明文件连接正常,已经起到存储的作用了。研究一下SQLiteConnection的相关内容。首先是它那几个构造函数。复制连接那个就不管了,看它剩下的那个构造函数吧,看看是什么格式。狂试自然不行,单步调试吧,不是有一步是把connsb(SQLiteConnectionStringBuilder)的值转换为string后赋值给conn(SQLiteConnection)吗,看看connsb的值,发现了,是”Data Source=sqlitetest.db;Password=acen”,应该就是这个了,试试。测试通过,那么把密码去掉试试。”File opened that is not a database file .file is encrypted or is not a database”,不出所料,出错了。刚才查看SQLiteConnection属性的时候,看到有DataSource项,莫非不用借助SQLiteConnectionStringBuilder直接赋值也行?嘿嘿,不用得意得太早,这是只读的,行不通。我要修改密码怎么办呢?再认真看看,从连接字符串一定是不可能的了,那就从SQLiteConnection这个类看看吧,有个SetPassword方法,这个方法有两种参数,一种是字节数组,另一种是字符串形式,用第二种吧,改为”imacen”,能运行,问题是能多次运行,不对吧,密码没改到?把新密码加到连接字符串,果真出错了。我刚才是放在打开数据库之前,莫非不能这样?那放在后面吧,还是错了,提示设置密码应当在数据库开始之前,莫非这只是设置连接时的密码?嗨,我错了,我没认真看,它还有个changePassword的方法,这个才是啊,而且要放在数据库打开后。那我就纳闷了,为什么有setPassword方法却没有setDataSource方法呢?把连接字符串的密码部分删了,再试试setPassword方法。成功,它真的是设置连接密码的,我想它为什么要加入这个方法呢,可能考虑到安全新问题吧,其它都是使用明文,只是猜测罢了。行,这部分就这样了,能连了就得。总结一下:1.       可以使用SQLiteConnectionStringBuilder类构建链接字符串,然后转换为string赋给SQLiteConnection的ConnectionString属性,密码没有就别写成””了。2.       在构造SQLiteConnection时直接用连接字符串,格式为”Data Source=xxx;Password=xxx”;其中密码部分可以在setPassword方法中设置。3.       修改密码使用SQLiteConnection的changePassword方法,需在数据库打开之后。
      

  2.   

    SQLite使用
      

  3.   

    Sqlit.net +Nhibernate+spring.net File opened that is not a database file file is encrypted or is not a database - JinaCookies - 博客园
    http://www.cnblogs.com/jinacookies/articles/2304337.html不要使用第三方的sqlite管理工具去加密或解密,如:navicat或其它。因为原生的sqlite根本就没有加密功能,而我们使用的sqlite.net里已经含有SetPassword()或ChangePassword()方法去加密或解密,所以,出现了用第三方加过密的用sqlite.net中的方法无法解密的情况。
      

  4.   

    用SQLite Developer来设置密码,就可以了,navicat确实有问题。