VS2005 C#开发Windows Mobile 5.0 智能设备程序

晨曦之光 发布于 2012/05/16 17:15
阅读 490
收藏 1

 

VS2005 C#开发Windows Mobile 5.0 智能设备程序

一.Visual Studio 2005中配置Windows Mobile 5.0开发环境

安装的软件包:
Microsoft ActiveSync 4.2
Windows Mobile 5.0 Pocket PC SDK
Windows Mobile 5.0 Emulator Images for Pocket PC - CHS
所需要的软件和补丁都可以从微软网站下载。


由于在安装时软件的先后安装顺序可能会影响到后续是否能成功安装或使用,因此在此给一个建议安装顺序:

1
Microsoft ActiveSync(一定要4.0版本之上才支持Windows Mobile 5.0

2
Microsoft Visual Studio 2005SP1VS的安装就不多说了,只是打SP1补丁实在太慢了,我大概要等了2小时)

3
Windows Mobile 5.0 Pocket PC SDK.msi(安装后出现的模拟器和镜像都是英文的,虽然一样用,但自然有点不大爽了)

4
Windows Mobile 5.0 Emulator Images for Pocket PC - CHS.msi(安装完后模拟器和镜像就都成为中文的了)

全部安装完成后,启动VS2005,菜单工具-》设备仿真器管理器,启动设备仿真器管理器,此时就能看见一长串列表,其中就有Windows Mobile 5.0 Pocket PC的中英文模拟器和镜像。

 

选中“CHS Windows Mobile 5.0 Pocket PC Emulator”,鼠标右键连接,就可以启动模拟器。

 

 

到此为止开发环境安装完成

二.数据库的选择

SqliteSQLCE

http://www.evget.com/zh-CN/Info/catalog/11974.html中作者对两种数据库的选择有明确的说明。我们选择开源的sqlite

1、  安装SQLite数据库 

安装很简单,登陆http://www.sqlite.org/网站,下载SQLite数据库的ZIP压缩,解压到指定目录,打开目录可以发现一个名称为sqlite3.exe的可执行文件,运行该文件可以通过命令行方式建立。详细的可用命令清单可以通过运行【.help】命令查询,每个命令的具体功能可查阅相关帮助文档,这里就不具体介绍了。

如:cmd命令找到sqlite3.exe 执行下面的命令创建数据库

执行sqlite3.exe mydb.db
create table test (id int,name varchar(20));insert into test values (1,'
张三');资料建立完成

2、  C#连接sqlite数据库驱动下载安装

下载System.Data.SQLite(http://sqlite.phxsoftware.com/),安装。下文会提到如何使用此驱动连接数据库。

3、  开发SQLite数据库常用的管理工具

由于sqlite操作很不方便都是命令的操作方式,选择一个好的可视化管理工具可以加快开发速度而且还可以减少错误的发生。

http://www.cnblogs.com/meiyou/archive/2009/09/12/1565497.html中作者对几种工作做了详细的介绍,以及它们的优缺点。

最开始我选择的SQLite Administrator此工具操作简洁很容易上手,但是它的致命的缺点让我很郁闷,对中文字符不支持,在程序中显示的中文数据都是乱码。最后选择了SQLiteSpy英文的操作起来很不方便,但不会出现中文乱码问题。如果哪位仁兄发现好的工具可以发给我一份,在此先谢过了。我的emailmaji2004@163.com

我们先来创建一个数据库和两个表下面的Demo中将会用到。如何创建自行研究利用可视化工具很简单,下面只给出表结够。

Mydb数据库,Dept部门表Emp员工表。

Dept

      Id int类型 主键 自增

      DeptName nvarchar 20

Emp

      Id int类型 主键 自增

      Name nvarchar 20

      DepId nvarchar 20

三.万事具备了,下面我们开发一个小Demo演示一下如何使用

打开vs2005选择 文件-新建-项目

选择Visual C#下面的 智能设备 下的windows Mobile 5.0 Pocket PC 然后选择Visual Studio已安装的模板中的设备应用程序 项目名称TestZN

Form1.cs[设计]中就会出现下图的页面

 

 

打开工具箱拖放一button按钮到窗体上(其实以后的程序开发和winform程序基本一样)

再添加一个窗体Form2。双击Form1中的button

private void button1_Click(object sender, EventArgs e)

{

    Form2 f2 = new Form2();

    f2.Show();

 }

打开Form2向窗体中添加button按钮,dataGrid控件如下图

 

下面添加Form3窗体设计如下:

 

项目中添加DataAccess.cs文件是对sqlite的数据库操作类。

项目添加引用如图

 

由于上面安装了System.Data.SQLite会自动把System.Data.SQLite.dll文件添加进来在.net组件中就能看到,选择System.Data.SQLite确定。下面写DataAccess.cs文件

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.SQLite;

using System.Data;

using System.IO;

using System.Reflection;

namespace TestZN

{

    public class DataAccess

    {

        SQLiteConnection con;

 

        SQLiteCommand command;

 

        public DataAccess()

        {

 

            con = new SQLiteConnection("data source=" + Path.GetDirectoryName(Assembly.Load(Assembly.GetExecutingAssembly().GetName()).GetName().CodeBase) + @"/mydb.db");//mydb.db位于debug目录下

 

            command = con.CreateCommand();

 

        }

 

        //读取数据

 

        public DataTable ReadTable(string tableName)

        {

 

            command.CommandText = "SELECT * FROM " + tableName;

 

            SQLiteDataAdapter da = new SQLiteDataAdapter(command);

 

            DataTable dt = new DataTable(tableName);

 

            da.Fill(dt);

 

            return dt;

 

        }

        public DataTable ReadTable2(string sql)

        {

 

            command.CommandText = sql;

 

            SQLiteDataAdapter da = new SQLiteDataAdapter(command);

 

            DataTable dt = new DataTable();

 

            da.Fill(dt);

 

            return dt;

 

        }

 

       public int ExecuteNonQuery(string commandString)

        {

            int result = 0;

            con.Open();

            using (SQLiteCommand command = new SQLiteCommand(con))

            {

                command.CommandText = commandString;

                result = command.ExecuteNonQuery();

            }

            con.Close();

            return result;

        }

 

    }

}

打开Form2窗体-属性-事件-Load 查询数据绑定dataGrid

private void Form2_Load(object sender, EventArgs e)

        {

           

            DataAccess dba=new DataAccess();

            string sql = "select id,name,(select depName from Dept where Dept.id=Emp.depId) as depName from Emp";

            DataTable dt = new DataTable();

            dt = dba.ReadTable2(sql);

            dataGrid1.DataSource = dt;

         

        }

双击Form2中的button添加代码

 

private void button1_Click(object sender, EventArgs e)

{

      Form3 f3 = new Form3();

      try

      {

          f3.ShowDialog();

       }

       finally

       {

            f3.Dispose();

            //刷新Form2中的dataGrid数据

            Form2_Load(sender, e);

        }

 

  }

打开Form3双击添加按钮

private void btn_add_Click(object sender, EventArgs e)

        {

            DataAccess dba=new DataAccess();

            string sql = "insert into Emp(name,depId) values('"+tb_name.Text+"',"+cb_dept.SelectedValue.ToString()+")";

            if (dba.ExecuteNonQuery(sql) > 0)

            {

                MessageBox.Show("添加成功");

            }

            else

            {

                MessageBox.Show("添加失败");

            }

        }

双击返回按钮

private void btn_back_Click(object sender, EventArgs e)

        {

            this.Close();

        }

Demo完成,编译通过。

下面我们来运行部署程序。

点击启动调试绿箭头,会弹出部署对话框如图:

 

如图所示选择CHS Windows Mobile 5.0 Pocket PC Emulator点击部署。部署的时候很慢长,请等待……

提示部署成功,出现如下界面。

点击“点击”按钮 提示如下错误:

无法找到 PInvoke DLLSQLite.Interop.065.DLL”。

关于这个错误网上很多人写的都是一带而过,对于新手来说很难弄明白。此问题的原因是软件在部署的时候没有把此文件发布到模拟器上,需要我们手动复制此文件到模拟器。

 

System.Data.SQLite安装目录我的是C:/Program Files/SQLite.NET

下的bin/CompactFramework/ 下有SQLite.Interop.065.DLL。在C盘根目录下新建文件夹cardSQLite.Interop.065.DLL文件拷贝到此文件夹中。点击模拟器文件配置

出现仿真程序属性对话框,在常规选项卡中“共享文件夹”点击后面的按钮选择C:/card文件夹,然后确定。如下图。

 

在模拟器中选择开始设置。如图

 

点击菜单,选择资源管理器 点击上面的ok,点击X回到开始桌面。再此选择开始,在下拉菜单中会出现资源管理器,选择资源管理器,如下图:

 

点击向上 回到我的设备,选择program files,你会看到项目工程名的文件夹,这就是我们发布之后的程序,我们选择testzn,如下图

 

 

图中TestZN就是我们发布的.exe文件,点击菜单显示所有文件 我们还会看到System.Data.SQLite.dll文件,系统提示:“无法找到 PInvoke DLL SQLite.Interop.065.DLL”就是因为发布的时候没有把此文件拷贝过来,下面我们手动拷贝。

点击上图中testzn的下箭头,如图:

 

选择Storage Card,里面显示的文件就是我们上面设置的共享文件,找到SQLite.Interop.065鼠标左键长按会弹出菜单,选择复制。

点击Storage Card下箭头回到testzn 鼠标左键空白处厂按弹出菜单选择粘贴。

单击testzn运行程序。

提示:

 

此错误的原因是我们没有把数据库复制到仿真模拟器上,点击退出。我们发现系统会为我们创建一个mydb数据库,大小0kb。我们删除掉此文件,复制我们创建的数据库,复制方法同上。

复制完成再此点击testzn运行程序。出现如下界面

 

成功了。到此为止也改结束了,啰啰嗦嗦一大堆,对新手可能会有点帮助(这也是我写此文的目的),对于熟悉智能设备开发的,我写的可能太烦人了o(_)o…

 

 


原文链接:http://blog.csdn.net/maji9370/article/details/4854651
加载中
返回顶部
顶部