要快速写一个通球仪数据监测程序,要求如下: 1、程序运行后在任务栏里显示图标; 2、读取MySql数据库里的记录,判断是“报平安” 还是“通球”,然后进行显示; 3、闪烁球的状态,通球期间显示红色有倒计时,其他时间显示绿色; 4、可以查询,多台计算机同时显示; 虽然是个小程序,也把人折腾得够呛,耗费了有四天,用手机发将近100条短信测试才搞定。 很长时间不写程序了,尤其是C/S端这样的程序,就先用PB做出来,后面再用C#重新写。 具体过程也简单,安装MySql驱动,在程序里通过ODBC连接,然后连接Ms Sql Server数据库,具体再写程序。 费了好几天的功夫才算弄好。
上面是所有文件,配置好MySql驱动和MsSqlServer驱动后直接双击程序就可以运行。 总结: 1、PB程序里程序资源文件打包只有在控件里装载才有效,否则字符串是不会打包的; 2、图标显示到任务栏,通过API来实现,可是像C#很容易就好了,因为C#封装了很多API函数所以更方便; 3、我用的是MySql 5.0,可是为什么像Select top 1 字段名,字段名 from 表名 Order by 主键 这样的语句都报告错误?在Ms Sql Server里却是好的,很奇怪; 4、配置其实也可以通过程序来完成,就是通过程序修改注册表信息,限于时间没有做; 5、数据库的并发锁很熬人。 6、随意给定两个点,然后让一个球沿着两点的连线进行运动,看似简单,做起来才不是那么一回事情,在数据窗口中,你首先需要设定坐标系,可是数据窗口的坐标原点在左上角,如果要计算直线的斜率就需要转换坐标系,这样麻烦!想了一个简单方法,直接用等比定理,很快就搞定了。
//在703-701之间
LS=SQRT( ( bz703.bz_y - bz701.bz_y )*( bz703.bz_y - bz701.bz_y ) +( bz703.bz_X - bz701.bz_X )*( bz703.bz_X - bz701.bz_X ) )
//实际对应的线段长度
LPSP=( lldistance / bz703.bz_distance) * LS
//根据等比定理进行运算
K= LPSP / ( LS - LPSP )
MoveY=( K * bz703.bz_y + bz701.bz_y )/(1 + K)
K=( LS - LPSP ) / LPSP
MoveX=( K * bz701.bz_x + bz703.bz_x )/(1 + K)
很简单的处理,开始还是让人烦恼了好长时间。 7、程序用到的技术: ⑴ 主程序驻留任务栏; ⑵ 取得任务栏的高度; ⑶ 任意两点之间的运动; ⑷ 访问MySql和MS Sql Server数据库; ⑸ 窗体的特效,如半透明、拖动、缩放; ⑹ 截屏幕并存储、显示; ⑺ 单实例运行; ⑻ 程序编译打包、发布。 又让写一个读取MYSQL数据库里数据在网页上显示的小程序。 用C#试了一下,可怎样也读不出来数据,邪门!以为是代码有问题,安装MS SQL Server 2008,建立数据库进行访问,代码如下:
SqlConnection MsSqlConn = new SqlConnection("Data Source=服务器名称;Initial Catalog=数据库名称;User ID=用户名称;Password=用户密码;");
MsSqlConn.Open();
SqlDataAdapter mda = new SqlDataAdapter("select * from dwmc", MsSqlConn);
DataSet ds = new DataSet();
mda.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
dataGridView1.Refresh();
MsSqlConn.Close();
读出了数据,说明代码没有问题,怎么会是什么?又是烦恼了一阵子,决定换一个驱动,在网上搜索MYSQL驱动,一个国外的MYSQL驱动程序很好,【MySQLDriverCS-n-EasyQueryTools-3.0.18.exe,老外就是牛,不服不行啊!】,下载,安装,C#写代码测试,读出了数据,在ASP.Net中也可以,缺点是显示汉字仍然有乱码。 C#代码:
using MySQLDriverCS;
MySQLConnection mysqlconn = new MySQLConnection(new MySQLConnectionString("IP地址", "数据库名称", "用户名", "口令").AsString);
mysqlconn.Open();
MySQLDataAdapter mda = new MySQLDataAdapter("SQL语句", mysqlconn);
DataSet ds = new DataSet();
mda.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
mysqlconn.Close();
和读取MS SQL Server和Oracle一样,上面的代码在ASP.Net下一样成功。 用网页形式可以快速方便地让同事看到,现在只能先用ASP对付,安装个人Web服务器,写了几行代码就可以了,可是怎样试就是不行,这个太郁闷了,无奈只好又换到ODBC来做,显示汉字也正常了。 MYSQL和其他数据库有不一样的地方,找资料看。
ASP代码:
%
......
手机号码
发送时间
具体内容
用网页形式正常,网页是自动选择字符集,一看用的字符集是UTF-8,明白了是选择问题,重新在C#中选择字符集,可是MySQLDriverCS不支持字符集选择,连接数据重载函数就三个: public MySQLConnectionString(string database, string login, string pass); public MySQLConnectionString(string server, string database, string login, string pass); public MySQLConnectionString(string server, string database, string login, string pass, int port); 怎么办?换回MySql.Data.dll(版本6.3.6.0)驱动,【public MySqlConnection(string connectionString);】,一试就好了!这样用Powerbuilder也没有问题了,当然,其他的类似解决都应该没有问题了。
//应用驱动MySql.Data.dll(版本6.3.6.0)
MySqlConnection mysqlconn = new MySqlConnection("server=服务器地址;uid=用户名;pwd=用户口令;database=数据库名称;Charset=utf8");
mysqlconn.Open();
MySqlDataAdapter mda = new MySqlDataAdapter("select * from sms_inbox", mysqlconn);
DataSet ds = new DataSet();
mda.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
dataGridView1.Refresh();
mysqlconn.Close();
这些简单代码的确让人发愁!浪费了好多时间。