请教一个奇葩问题不知道怎么解决,关于sqlite

Tiny~ 2018-11-05 08:32:23
这个问题之前提过,但是一直没有好的解决方法。
我做了一个winform,用的sqlite,然后根目录下有X64 X86两个文件夹,里面文件名都叫SQLite.Interop.dll,这个根据客户端系统来自动调用的,但是问题就出在:

一切使用正常,不管操作系统是32还是64,但是:我设计的自动下载数据库更新文本,
如果是64位,正常
如果是32位,提示X86下找不到更新数据库的文件,必须把那个数据库更新文件,复制到X86目录下……

这个是啥情况呢?如何彻底解决它?是不是发布的时候,不要选择Any CPU,直接选择X86,就引用一个dll直接放在根目录下?





...全文
47 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiny~ 2018-11-07
  • 打赏
  • 举报
回复
引用 18 楼 xuzuning 的回复:
下载的 sql.txt 并非数据库,你是使用代码读取后更新数据库的
因此这并非是 SQLite 的问题,而是你代码的问题。
不要随意的扩大故障范围,不能说你用了 SQLite 就说是 SQLite 的问题

部分同意,但还是没解决为何部分32位系统电脑识别不到根目录下的sql.txt,但是把sql.txt拷贝到sqlite生成的x86文件夹下就可以了?我的代码写的明明是根目录下的,所以,奇怪



mylgekn 2018-11-06
  • 打赏
  • 举报
回复
查看下客户端的.net framework版本
失落的神庙 2018-11-06
  • 打赏
  • 举报
回复
xuzuning 2018-11-06
  • 打赏
  • 举报
回复
下载的 sql.txt 并非数据库,你是使用代码读取后更新数据库的
因此这并非是 SQLite 的问题,而是你代码的问题。
不要随意的扩大故障范围,不能说你用了 SQLite 就说是 SQLite 的问题
Tiny~ 2018-11-06
  • 打赏
  • 举报
回复
引用 16 楼 mylgekn 的回复:
查看下客户端的.net framework版本


这个还真没注意过,软件安装包我做的设置是检测电脑是否安装了.net framework 4.0,如果没有中断安装。

昨天晚上在虚拟机和笔记本重装了win7 32分别测试,又没这个问题,但是在2个客户那边确实又碰到了这个问题,而且那2个客户确确实实都是32位系统,提示都是一样的就是提示在根目录下的X86文件夹下找不到sql.txt,好奇怪!

断电测试,路径都是对的

算了,不管了,100个客户2个人碰到这个问题,下次客户碰到用他电脑远程测试下看看

谢谢楼上各位指导!
Tiny~ 2018-11-05
  • 打赏
  • 举报
回复
附上我的部分代码,如果不愿意回答的大佬们就算了,问题回头我自己结贴,只是别动不动就怀疑别人是不是自己写的




//路径,这里我设置的是软件根目录下,放在一个类里面,这里是合并放在便于大佬们查看代码放在一起了
string mp = Assembly.GetExecutingAssembly().Location.ToString();
mp = mp.Replace("main.exe", "");
epath.exepath = mp;


//判断sql升级文件是否存在
if (File.Exists(epath.exepath + @"\sql.txt"))
{

string sqlupdate = ReadFileOfTXT(epath.exepath, "sql.txt").ToString(); //读取sql.txt里面的内容
if (sqlupdate.Length > 0)//如果有内容,执行数据库升级语句
{
string cmd1 = sqlupdate;
SQLiteCommand com1 = new SQLiteCommand(cmd1, conConnection);
try
{
com1.ExecuteNonQuery();
}
catch (Exception ex)
{

}
// conConnection.Close();

//执行完毕,删除升级文件
DeleteFile("sql.txt");
}
}
Tiny~ 2018-11-05
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
谁知道你怎么写的呢?

看你无厘头地把 SQLite.Interop.dll 和 sql.txt 两个文件放到一起来回纠缠地说,而又说不出它们联系的机制,我估计程序不是你写的。你还是找真正了解这个 sql.txt 的设计师、真正能调试到语句级别的编程者来调试、测试一下。



引用 4 楼 sp1234 的回复:
你看有些江湖郎中靠“相面”给人看病,假装在那里把脉,其实就是相面、通过谈话套取病人的信息,然后拿出几个偏方来“包治百病”。而真正的医生起码应该懂得更加科学的诊断方法。

看你的问题,就是从表面现象去应付,没有任何深入的测试、调试技术。




你怎么知道不是我写的呢?搞笑不,呵呵
非得强调什么江湖郎中之类扯不上边的,那么你回答一个简单的问题非要扯这么多之乎者也,你累不累,就和以前孔乙己一样掉书袋,请问回字有几个写法?

如果不愿意回答或者不屑于回答我这么“弱智”的问题,就别浪费您教书育人的时间,好吗?


Tiny~ 2018-11-05
  • 打赏
  • 举报
回复
引用 5 楼 qq_32661557 的回复:
可能你写入sql.txt文件的问题?没有判断文件是否存在?


肯定有代码判断是不是存在sql.txt。我设置的判断是如果软件根目录下有sql.txt以及其他触发条件,才会启动数据库更新,sql.txt也没任何问题,而且如我上面说的,64位系统一直没问题,32位就提示找不到问题

x64 x86文件夹不是我添加的,nuget自动下载生成的,我看了sqlite官方的介绍,sqlite的支持组件会自动判断客户端操作系统进而分别调用x86 x64里面的SQLite.Interop.dll

如果说我代码有问题,那么为何64位一直没问题呢,但是32位系统就提示找不到sql.txt,必须得把sql.txt拷贝到x86文件夹下面,和x86文件夹下的SQLite.Interop.dll并列,才可以被“识别”到sql.txt。如果是代码有问题,那么64位操作系统的电脑为何没这个提示呢?

所以这才是我奇怪的地方。
本人QQ-554433626 2018-11-05
  • 打赏
  • 举报
回复
可能你写入sql.txt文件的问题?没有判断文件是否存在?
  • 打赏
  • 举报
回复
你看有些江湖郎中靠“相面”给人看病,假装在那里把脉,其实就是相面、通过谈话套取病人的信息,然后拿出几个偏方来“包治百病”。而真正的医生起码应该懂得更加科学的诊断方法。 看你的问题,就是从表面现象去应付,没有任何深入的测试、调试技术。
  • 打赏
  • 举报
回复
当程序提示一个目录下找不到 sql.txt 文件时,这么简单的问题,自然是可以跟踪其原因的,但是只有你自己才知道该如何跟踪。你连源代码都不说明,谁也不知道这个文件是怎么来的。
  • 打赏
  • 举报
回复
谁知道你怎么写的呢? 看你无厘头地把 SQLite.Interop.dll 和 sql.txt 两个文件放到一起来回纠缠地说,而又说不出它们联系的机制,我估计程序不是你写的。你还是找真正了解这个 sql.txt 的设计师、真正能调试到语句级别的编程者来调试、测试一下。
Tiny~ 2018-11-05
  • 打赏
  • 举报
回复
我设计的是数据库远程联网校验,如果数据库有更新,就下载更新语句放在根目录下面,比如叫sql.txt,下一次启动如果检测到就自动更新它。如上所述,如果是64位系统,不管7还是10,一切正常使用。但是如果是32位我用win7测试过,就会出现提示找不到sql.txt,必须把sql.txt拷贝到X86目录下才可以完成更新。目前用我写的软件的大部分客户都是64位操作系统,所以没有出现太多问题,但是有个别客户电脑系统还是32位,这个问题以后可能还是会出现,这个为啥会这样呢?

是发布选择目标平台X86呢,引用一个dll,还是下载sql.txt的时候,判断客户操作系统是32还是64,如果是32放在X86目录下?
Tiny~ 2018-11-05
  • 打赏
  • 举报
回复
引用 9 楼 qq_26671507 的回复:
你在32位64位下分别把这个路径epath.exepath + @"\sql.txt"打出来看看有没有区别。


晚上回家用笔记本重装个32位试试看,谢谢指导
Tiny~ 2018-11-05
  • 打赏
  • 举报
回复
引用 12 楼 daixf_csdn 的回复:
对调试应用的还不够熟练。
1、开发环境下,直接调试跟踪
2、不是在开发环境下,判断问题可能点,记录日志并输出

你做个情况,选2,把系统取的路径输出看看情况,然后看怎么调整。


谢谢,我再试试看,可能还是太“懒”,用我软件的大部分客户,都是64位系统,少部分客户出现这个问题都是给他们远程解决了影响不大所以一直没去解决。晚上回家用笔记本重装个32位试试看,谢谢指导
Tiny~ 2018-11-05
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
如果不做更新,库文件 也报位置错吗?


嗯,是的,如果不做更新,软件正常使用,不管是32 64,win7 win10都正常,只要做更新,我也不能完全肯定是不是所有,我碰到2个客户是32 win7,就出现了1楼我描述的问题,特别奇怪
圣殿骑士18 2018-11-05
  • 打赏
  • 举报
回复
对调试应用的还不够熟练。
1、开发环境下,直接调试跟踪
2、不是在开发环境下,判断问题可能点,记录日志并输出

你做个情况,选2,把系统取的路径输出看看情况,然后看怎么调整。
xuzuning 2018-11-05
  • 打赏
  • 举报
回复
如果不做更新,库文件 也报位置错吗?

cheng2005 2018-11-05
  • 打赏
  • 举报
回复
自己写的代码你就调试啊,找“sql.txt”文件和读“sql.txt”文件都是你自己写的,调试一下不就知道了。
qq_26671507 2018-11-05
  • 打赏
  • 举报
回复
你在32位64位下分别把这个路径epath.exepath + @"\sql.txt"打出来看看有没有区别。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧