VS2008中开发智能设备程序的一些总结

 

原文链接:http://blog.csdn.net/citybug_nj/article/details/2598705

程序中包括四个部分:

  1. 系统配置

这个部分用来配置系统中的相关参数,参数包括数据库信息和串口的配置信息。这部分的主要技术是XML文件的读取和写入。

  1. 数据下载

从数据库中下载数据到PDA,PDA上的保存也是使用数据库。这部分的技术主要是PDA设备上的移动数据库开发和使及用PDA连接PC数据库

  1. 数据上传

把PDA上的数据上传到PC数据库中,使用的技术和2相同。

  1. GPS数据获取

通过外置蓝牙GPS模块获取当时所在位置的经纬度,并将经纬度保存在PDA上的移动数据库中。涉及到的技术有串口数据的读取,GPS数据的解析。

2         开发环境

软件环境: Visual studio 2008

PC数据库: sql server

智能设备: Windows Mobile 6

3         建立工程

3.1      建立项目

建立工程的过程和VS建立其他工程步骤相同,通过vs2008中的菜单“文件-新建-项目 ”,建立一个新项目。

 

VS2008已经集成了智能设备的开发环境,根据开发语言的不同,在不同的开发语言树中选择“智能设备”,下方的名称中填写项目名称,点击“确定”按钮,就建立了一个智能设备的程序项目。

3.2      建立调试环境

VS2008中已经包括了智能设备的仿真程序,编写的程序可以通过PC机上的仿真程序进行调试,不必在PDA上逐个调试程序。

建立项目后,通过菜单“项目--项目属性”中的“设备”页中设置调试内容。

 

在下拉框中,选择目标设备的类型。类型的选择要根据PDA的操作系统进行确定,PDA上如果是中文操作系统,请选择“CHS”打头的选项。具体如何选择,请根据PDA的操作系统进行。如果对选项中的内容不了解,请查阅其他资料。

    仿真程序的选择和设置不仅仅只有这一种方式,也可以通过VS2008中的“工具-设备仿真器管理器”进行设置。

3.3      绘制窗体

智能设备的窗体和windows窗口的差别不是很大。在工程中选择添加窗体后,VS中出现PDA屏幕模样的模板。需要什么功能,在工具箱中把对应的控件拖到模板上即可。这部分的开发和普通的Windows程序开发没有什么不同。

 

不同的部分就是菜单。智能设备的菜单中有缺省菜单,就是在屏幕底部有个菜单控件,可以通过增加菜单项的方式增加菜单。需要注意的是,一级菜单只能有两个,而且设置的时候,只能先设置左边的菜单项内容,才能设置右边菜单项内容。

控件的使用也是有严格限制的。VS2008中能使用的控件分布在工具箱的“所有设备控件V2”、“公共设备控件 v2”、“设备容器 v2”、“设备菜单和工具栏V2”、“设备数据V2”、“设备组件V2”、“设备对话框V2”。使用控件的方式和Windows窗体的设计没有什么不同。

4         调试

调试程序的方式同普通的程序调试差别不大,也通过单步调试等等的功能。唯一的差别就在于调试中程序在仿真器中运行。

 

4.1      其他文件

在调试中,程序如果只有一个EXE文件,而不涉及到其他文件,可以直接在仿真程序中运行。但是如果程序还有其他文件的话,需要把文件也要部署到PDA仿真器上。如何部署其他文件,请参考下面步骤:

  1. 通过仿真器上的菜单“文件――配置…”菜单设置共享文件夹。

 

 

通过后面的按钮,浏览电脑中的磁盘,并选择恰当的目录。“共享文件夹”在设置完成后,将作为PDA仿真器的扩展存储空间,仿真器中共享文件夹被命名为“Storage Card”。那么在仿真器中就可以直接操作共享文件夹中的文件。

这时候,就可以把其他和程序相关的文件拷贝到需要的地方。下面以一个XML文件为例。这个XML和程序的可执行程序在一个目录下,用来保存程序的设置参数。XML文件在电脑上,程序中通过读取可执行程序所在的目录来指定XML文件的目录。但是很不幸,仿真器在运行过程中,认为EXE可执行程序在“program files//项目名称”这个目录下,这个目录是仿真器中的路径,肯定是不会找到XML文件的。这就需要把XML文件也放置到“program files//项目名称”目录下面去。

 

在仿真器中点击“开始-资源管理器”,打开后选择“Storage Card”。在这个里面通过目录-文件的方式选中文件,然后点击下面的“菜单-编辑-复制”,将文件复制出来。

 

然后通过仿真器界面上的文件-目录功能,找到“我的设备-program files-项目名称”,进入以项目名称为名称的目录,通过“文件-编辑-粘帖”,把文件拷贝到可执行程序所在的运行目录下。

 

 

5         移动数据库

在这个项目中,使用的是微软的SQL SERVER Mobile Compact Editor 3.5。其他的数据库还没有使用过。仅仅就SQL SERVER Mobile Compact Editor 3.5的使用方法说明。

5.1      获得SQL SERVER Mobile Compact Editor 3.5

SQL SERVER Mobile Compact Editor 3.5可以直接从微软的网站上下载,网址为:http://www.microsoft.com/downloads/details.aspx?familyid=7849B34F-67AB-481F-A5A5-4990597B0297&displaylang=zh-cn

下载后在电脑上进行安装。默认安装到C:/Program Files/Microsoft SQL Server Compact Edition下。

3.5版本为最新版,增加了设置数据库文件密码的功能。也可以使用其他版本的SQL SERVER MOBILE替代。

5.2      在SQL SERVER MANAGER STUDIO中使用SQL SERVER MOBILE

 

在登录部分,服务器类型选择“SQL SERVER MOBILE”,数据库文件通过下拉框中的“浏览更多…”选择建立的数据库文件,也可以通过选择窗体中的“新建数据库”建立新的数据库。

 

 

输入数据库密码,即可登录到SQL SERVER MOBILE数据库中。需要说明的是,3.5版本建立的数据库,在SQL SERVER MANAGE STUDIO 2005中可能无法登录。

5.3      Sql server mobile数据库中建立数据表

Sql server mobile中建表可以通过sql server manage studio 2005中的建表向导进行建表,也可以通过sql语句进行建表。建表的时候需要注意字段类型和sql server中的字段类型并不相同,在sql server中能使用的字段类型,在sql server mobile中可能无法使用,在建表的过程中需要注意这点。

5.4      在智能设备上部署sql server Mobile数据库

把建好的数据库文件通过4.1中描述的方式,拷贝到相应的仿真器目录下。这时候仿真器就可以连接并操作SQL SERVER MOBILE数据库了。

但是如果使用PDA访问SQL SERVER MOBILE,注意Windows Mobile中不包含数据库引擎,需要额外的安装四个包。如果不安装这四个包,程序将无法连接和读取SQL SERVER MOBILE数据库。

这四个包在sql server mobile安装目录下,具体的是C:/Program Files/Microsoft SQL Server Compact Edition/v3.5/Devices/wce500/armv4i目录下面,包括:

sqlce.dev.CHS.ppc.wce5.armv4i.CAB

sqlce.ppc.wce5.armv4i.CAB

sqlce.repl.ppc.wce5.armv4i.CAB

sqlce.wce5.armv4i.CAB

将这四个文件拷贝到仿真器上,并安装。

安装后,PDA的程序中增加了三个程序: sqlservercompact 3.5 Repl

SqlserverCompact 3.5 Tools CN

SqlserverCompact 3.5 Core

当不用移动数据库时,可以卸载这三个程序。

6         智能设备连接操作PC数据库

智能设备操作PC数据库,有两种方式:

一种是通过无线连接,一种是通过USB连接到电脑上。无线连接在普通环境下使用普遍性不足,很多情况下是通过USB数据线进行连接的。使用USB数据线连接,PC电脑上需要安装同步工具,目前使用较多的为微软的ActiveSync,下载地址是;

http://www.microsoft.com/downloads/details.aspx?FamilyID=cabdb564-ae94-4c02-abbc-cdece61231d4&DisplayLang=zh-cn

智能设备和PC同步后,就可以把智能设备看作一台电脑,可以连接数据库。

7         数据库连接字符串

7.1   Sql server mobile

在工程中增加引用,引用System.data.sqlserverCe

类中使用命名空间:System.data.sqlserverCe

数据库链接类名、命令类名及记录集类名中都使用包含Ce的类。

 

具体代码如下:

using System;

 

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlServerCe;

using System.Data.SqlClient;

 

namespace GPSDataReader

{

    public partial class frmDamUp : Form

    {

        SqlCeConnection ConnMobile;

        SqlCeCommand command;

 

        public frmDamUp()

        {

            InitializeComponent();

        }

 

        private void frmDamUp_Load(object sender, EventArgs e)

        {

         //获取可执行程序所在目录和数据库文件

            string sFilePath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "//DamBase.sdf";

         //连接sql server Mobile数据库的连接字符串

            string ConnStr = "Data Source=" + sFilePath + ";Persist Security Info=False;password=admin;";

         //建立链接

            ConnMobile = new SqlCeConnection(ConnStr);

            try

            {

                ConnMobile.Open();

            }

            catch (Exception ex)

            {

                MessageBox.Show("不能正确连接移动数据库!" + ex.Message);

                this.Close();

            }

            command = new SqlCeCommand();

            command.Connection = ConnMobile;

 

            string sqlstr = "select * from DamInfo where IsUP='1'";

            command.CommandText = sqlstr ;

            SqlCeDataReader rs = command.ExecuteReader();

            while (rs.Read())

            {

                ListViewItem lv_Item = new ListViewItem();

                lv_Item.Text = rs["RSID"].ToString();

                lv_Item.SubItems.Add(rs["RSNM"].ToString());

                lv_Item.SubItems.Add(rs["DMPRV"].ToString());

                lv_Item.SubItems.Add(rs["DMCT"].ToString());

                lv_Item.SubItems.Add(rs["DMTW"].ToString());

                lv_Item.SubItems.Add(rs["EL"].ToString());

                lv_Item.SubItems.Add(rs["NL"].ToString());

                lv_Item.SubItems.Add("未上传");

 

                lv_DamInfo.Items.Add(lv_Item);

            }

            rs.Close();

 

            if (lv_DamInfo.Items.Count == 0)

            {

                MessageBox.Show("没有需要上传的数据!");

                this.Close();

            }

        }

7.2      智能设备连接PC上的SQL SERVER

智能设备不支持OLEDB连接方式,只能使用SQLSERVER  .Net的连接方式。所以增加System.data.SqlClient引用。在需要连接的类中增加System.data.SqlClient命名空间。

代码如下:

using System;

 

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlServerCe;

using System.Data.SqlClient;

 

private void b_Down_Click(object sender, EventArgs e)

{

     string sqlstr;

 

     string Connstr = "user id=sa;password=2centit13;initial catalog=DamBase;Server=" + ConfigInfo.IP + ";Connect Timeout=30";

            SqlConnection Conn = new SqlConnection(Connstr);

            try

            {

                Conn.Open();

            }

            catch (Exception ex)

            {

                MessageBox.Show("无法连接到指定的PC数据库!" + ex.Message);

                return;

            }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go语言值得学习的开源项目推荐

谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects 其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也有大型如nsq、docker等的项目。 下面推荐几款适合学习的项目: 1、…

部分Nand flash uboot 命令详解

nand info & nand device显示flash的信息: DM365 :>nand info Device 0: NAND 32MiB 3,3V 8-bit, sector size 16 KiB DM365 :>nand device Device 0: NAND 32MiB 3,3V 8-bitnand read(.oob) addr off size 不管是读取data, 使用nand read,还是…

java7

第八章 数组 1.数组的声明定义 数据类型[]变量名 new 数据类型[长度]; 列:int[]ary new int[5]; 2.取值,赋值 取值:数据名[下标]; 列:int a ary[1]; 赋值:变量数据名[…

BZOJ 3564 信号增幅仪

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id3564 题意:给出平面上n个点,画出一个椭圆,椭圆的长轴是短轴的p倍,且长轴的方向为x轴逆时针旋转a度。求这个椭圆短轴的最小值使得可以覆盖所以点。 思路&…

CentOS 7 搭建JAVA环境

安装环境: LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.3.1611 (Core) Release: 7.3.1611 Codename: Core 开始 运行java -version 检查系统是否安装JRE 或JDK,有则卸载系统自带JAVA包输…

串口波形分析

UART口发出数据按字节发送,发送数据8bit,实际量出波形为10bit,软件底层驱动会自动加上起始位和停止位各1bit,起始位为0,停止位为1。下图为用串口工具发送的数据和用示波器所量波形。 发送数据:0x34 0x43 示…

SpringBoot之MongoTemplate的查询可以怎么耍

学习一个新的数据库,一般怎么下手呢?基本的CURD没跑了,当可以熟练的增、删、改、查一个数据库时,可以说对这个数据库算是入门了,如果需要更进一步的话,就需要了解下数据库的特性,比如索引、事物…

这可能是我见过最详细的快速排序!

关于快速排序,网上,和维基都有完成的解释,他们都是。。。。。。,俺觉得都是,太过于总结话语在概述一些东西; 而我却从最本质的东西,一步一步的深入;在深入的学习过程中,我…

LINQ to SQL 实现 GROUP BY、聚合、ORDER BY

前言 本示例主要实现 LINQ 查询,先分组,再聚合,最后在排序。示例很简单,但是使用 LINQ 却生成了不同的 SQL 实现。 1) 采用手动编写 SQL 实现 SELECT ROW_NUMBER() OVER(ORDER BY T.RealTotal DESC) AS SN, * FROM ( SELECT (S…

Mysql之事务

什么是事务 假如你下了一笔订单,会有以下数据库操作: 1. 生成一笔订单记录 2. 减少库存 3. 从你的账户中减少金额 4. 生成支付记录 这边的四个操作缺一不可,一旦某一个操作出现异常,则全部操作都需要全部回滚。而事务的作…

JVM垃圾回收机制总结

对于垃圾回收机制我先抛出三个问题: ①哪些内存需要回收? ②什么时候回收? ③如何回收? 下面我们主要针对这三个问题来研究JVM GC 一、哪些内存需要回收? 1.JAVA使用可达性分析法来判断对象是否需要回收。 这个算法的基…

虚拟机增加内存方法

楼主由于要在虚拟机里面装一个oracle,在安装过程中,提示物理内存不符合最低标准,如图1. 图1 因为懒得新建一个虚拟机了,所以考虑给虚拟机新增磁盘空间。 首先说明,新增磁盘空间,必须保证当前虚拟机里每个新…

myBatis xml if、where、if-else?、foreach 心得

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这…

bzoj千题计划213:bzoj2660: [Beijing wc2012]最多的方案

http://www.lydsy.com/JudgeOnline/problem.php?id2660 很容易想到是先把n表示成最大的两个斐波那契数相加,然后再拆分这两个斐波那契数 把数表示成斐波那契进制的形式,第i位表示有没有第i个斐波那契数 比如16133 001001 那么拆分一个数就是把一个1…

面对对象-封装

private 私有的 package/friendly/default 不写 protected 受保护的 public 公共的 那么什么情况该用什么修饰符呢?从作用域来看,public能够适用所有的情况。 但是大家在工作的时候,又不会真正全部都适用public,那么到底什么情况改用什么修饰…

本文详解5G是个什么鬼,程序员都准备好了吗?

无线移动通讯发展历史 最近5G的概念炒的如火如荼,为此,华为和高通还干了一仗。这篇文章从技术层面给大家分析,什么是5G,它和4G比,高级在哪里? 我们来看看移动互联网的技术发展: 然后我们在来看看…

安装kerberos报错 error: command 'gcc' failed with exit status 1

pip install kerberos 报错:error: command gcc failed with exit status 1 安装环境工具 yum install gcc libffi-devel python-devel openssl-devel 再次安装kerberos安装成功 转载于:https://www.cnblogs.com/panbc/p/8268574.html

jquery正则表达式验证:验证全是数字

需求说明: 前端页面使用正则表达式验证输入框中输入的内容全是数字。 代码说明: 这里只介绍正则表达式,其他部分的代码不做介绍。如果有其他需要自行修改即可。 步骤一:建立一个页面可以是html、jsp等,引入jquery-3.2.…

0613课堂汇总

一: 数据类型: 基本数据类型{byte(8)/short(16)/char(16)/int(32)/float(32)/long(64)/double(64)/boolean(1)}引用数据类型{*除了基本数据类型都是引用数据类型 *包括API中的类(String,File)*自定义的类(Personal A…

Istio流量管理实践之(5): 使用cert-manager部署Istio自定义入口网关及进行证书管理...

Istio Gateway提供多个自定义入口网关的支持能力,通过开放一系列端口用于承载网格边缘的进入连接,同时可以使用不同loadbalancer来隔离不同的入口流量。cert-manager可用于使用存储在Kubernetes Secret资源中的任意签名密钥对来获取证书。本文提供了手动…