日期:2014-05-19  浏览次数:20932 次

想实现类似delphi中的包的功能,请给点思路.
我写的是winform程序,能自动升级,也就是安装程序后,如果有新的版本发布,只需上传到服务器,客户端运行时会自动下载最新版本,这点已经实现,实现方法也很简单,在数据库中放一个表,该表至少有三个字段,一是版本号,一是文件名,一个是存放文件内容的image型字段,程序启动时,检查版本号,如果比本地ini文件中的要高,就将文件内容下载到本地,覆盖原来的文件,并修改本地ini文件中记录的版本号.
        当一个程序运行稳定后,就没有必要经常更新客户端了,虽然是自动的.现在有这样一个功能需要实现,主程序基本上不用改变了,但用户经常要查询,且查询条件是不定的,我希望根据客户的需求,专门为各种查询编写一个特定的窗口,供生成查询条件条件,用户选择一个查询后,将这个窗口(以某种形式)下载到本地,该窗口关闭后返回一个sql语句,有下面一些想法,但都失败了:
1、将查询窗口生成dll,用到的时候下载到本地,但程序运行后,无法覆盖所引用的dll
2、将窗口序列化,用到的时候从服务器读到内存中,再动态产生,但窗口、控件无法序列化
3、调用web窗口,也就是开发webform程序专门供查询使用,这样只要修改服务器上的webform就可以了,但为实现数据交换,winform和webform如何实现参数传递实在想不出来.
        不知道表达清楚了没有,总之,在服务器中放一个表,存放提供的查询名称和相关信息,主程序读入名称,并显示到菜单中,用户选择一个查询时,主程序根据选择的名称,从该表其他字段中得到相关信息,并生成一个查询窗口,查询窗口可以是定制的,随时可能变,但按确定按钮后,都能生成一个sql语句,如select   *   from   myTableName,当然,通常的做法是创建一个窗口,里面有确定、取消两个按钮,点确定后,产生一个sql语句,并设置DialogResult为DialogResult.OK,具体查询窗口从该基类中派生出去,现在的关键是,如何将派生后的窗口部分上传到服务器,并在程序运行时动态下载.
      有点累,语文没有学好.


------解决方案--------------------
我的实现方法是写一个独立的升级程序,如果在主程序中检测到有新的程序,就自动重启!
主程序在启动的时候,首先检测是否有新的版本,如果有,就使用多线程方式调用升级程序。

------解决方案--------------------
接分
------解决方案--------------------
你的应用仅仅是与数据库打交道,把窗体对象保存起来的想法很愚蠢!
当然你一定要做也有办法,把对象转换成流,保存起来就行了。

建议你更好的思路:
建立用户自定义查询组件,负责合成SQL语句;查询窗体只是一个显示平台,各种数据感知控件的容器,你只需要写些控制代码,让数据感知控件的显示方式随查询组件对象变化就行了。

------解决方案--------------------
查询窗体显示,没有必要整的那么复杂,查询结果不同主要表现在显示的字段上,精力多在数据查询上放一点。觉得楼主解决问题的方法太复杂了。系统版本升级好的大体差不多,用多线程效果更为好一点。