基于wince编程开发PDA应用
时间跨度3.8~3.12。
周三的晚上,本来愉快的准备对创新项目构想,忽然接到一个任务,开发一个小型wince应用,大致有几点需求:
1.扫一维码自动判断类型并填充文本框
2.从数据库中读取信息填充文本框
3.对输入文本框的数据做输入检测
4.将所有文本框的数据写入数据库
5.要求制作登录界面,不允许多用户使用不同设备登录同一个账号
需求大致这些,一开始接到这个任务我表示
基于C#编程而且还是wince的应用,而且wince不能直接访问数据库,必须通过webservice。
C#在毕业设计做过,但这都这么久了,语法都忘得差不多,而且wince到底是什么鬼,webservice更是没用过,最蛋疼的是周一就要交任务
好在经过一番折腾,现在已经任务交差了,记录一下调试过程中遇到的问题,以便以后开发不再犯同样的错误。
坑点1:使用VS2008及以下的版本进行开发
怎么说呢,无力吐槽,网上没有找到2008以上的版本支持开发智能设备,以上的版本只能开发windows phone。所以一开始在vs2012无法创建项目的问题上卡了很久。
坑点2:SQLSERVER2008数据库选择
长期不使用SQLSERVER,完全忘记了如何操作数据库。结果在连接本地数据库时花了一个小时都连不上。以为是serverip选择错误,无论改成localhost还是127.0.0.1或是本机ip地址都无法连接。后来突发奇想查看以前做过的毕设,终于发现,连接SQLSERVER的server必须有\\SQLEXPRESS。解决。
坑点3:webservice配置问题
因为对网络通信不熟,测试时使用localhost,PDA调用webservice连接数据库时无法访问,这一点困扰了3个小时都没有发现,后来终于在张老师的帮助下找到了问题。webservice应该是开发最简单的一部分,但是卡住时间最久的地方了。
坑点4:使用VS连接PDA调试出现0x8..... 设备部署错误
这一点无论在百度还是google都找到不到解决方案,解决办法为新建项目,将所有代码拷贝到新项目中。怀疑是PC与PDA建立连接后没有断开连接,而实际上PDA断开了与PC的连接导致再次调试出现配置问题,所以新建项目就能解决,因为新建项目后重置了连接。
坑点5:wince窗体界面刷新问题
因为登录时没有提示,所以考虑用户重复提交登录信息的问题,和负责人商量以后决定在登录时将登录按钮设为visible=flase,但是,只有在弹出对话框,也就是手动写一句MessageBox.show(information)时界面才会刷新,否则完全看不到按钮有任何反应,何等蛋疼,这一点到现在也没有解决,只好用折中的办法,设一个flag标签在登录判断时跳过登录按钮功能(但是用户依然可以点击),这样解决重复提交问题,但是用户体验还是很差。
设计方案:
1.如何防止用户多设备登录同一账号:
做法为在数据库的user表中添加user_log_data和user_flag,登陆后自动将user_flag设为1,只要用户有任何操作就更新user_log_data,用户退出是将user_flag再设为0。
登录时判断user_flag是否为0(可登录),否则再判断user_log_data的时间于现在是否超过30min(可能是程序异常退出),大于30min可登录。
缺点:
用户一旦异常退出,就需要等待30min才能登陆;
用户将应用长期挂起(超过30min),另一个用户就可以登录,出现了重复登录问题。(可以考虑设计软件的休眠时间,不知可不可行,但是后来没做尝试)
2.如何根据PDA扫码的长度判断扫码所属类型:
设计上要求大于5位为A属性,小于5位为B属性,还要求输入回车以后自动执行提交数据库按钮。
因为PDA扫码特性,会在扫码后自动加入回车,可以以此为依据,判断长度。
若当前光标停在B属性文本框中,且长度大于5,则将信息复制到A属性文本框并清空B文本框后将光标再移到B属性上,A同理。
当然提交时要做空值判断,空值禁止提交。
3.存储过程
这一次负责人提供了存储过程,发现真是个好东西,而且时间效率又快。只要通过webservice传递一些参数即可,以后做数据库写SQL时考虑使用存储过程。
毕竟是用VS编程且是窗体应用,在布局上还是很方便的(不得不再次吐槽VS的智能提示和自动补充,即使VS2012也没有变化)。总的来说相当于三天完成了任务,不算复杂,但是因为不熟悉走了很多弯路,如果以后再有这类要求的话就会轻松很多了。
最后放一张PDA的图,看着还不错。