windows mobile开发循序渐进(4)移动应用程序的数据存储之本地数据存储第二篇
之所以分解来写,是因为在写的过程中会有些穿插的工作,希望能够尽量写的更细节一些。
上篇说的是本地存储的XML和DataSet之间的交互,现在我们来看看windows mobile 是如何与数据库进行交互的。
轻量级的SQL Server CE
由于windows mobile 5.0中包含了.Net compact framework组建,谈到.Net平台的数据存储,我们首先想到的是ADO.NET,是的,在windows mobile设备访问本地的数据库使用的正是类似ado.net的一组操作类,从webcast上我找到了这样的结构图示
- .net compact framework managed stack
- visual studio .net
- ado.net
- sql server ce data provider
- .net compact framework runtime
- ole db for windows ce
- sql server ce data provider
从这个结构可以看出,其实这和windows form应用程序的访问数据库架构几乎一模一样,这样的话我们就可以很简单的来使用这些组件访问数据库了。
windows mobile 5.0中带的数据库是SQL Server CE,这是一个轻量级的数据存储组件。其数据库的存在形式是一个单独的文件(如:northwind.sdf),你可以直接在模拟器中打开,打开方式默认是在sql server ce中打开,界面类似于SQL Server 中的查询分析器,如下图:
可以在这里输入查询命令
这里是查询结果窗口
了解了这些之后,我们看看windows mobile 上的应用程序是如何访问 SQL Server CE 的
移动应用程序与SQL Server CE之间的交互
同我们熟悉的sqlconnection,sqlcommand,sqldataadapter一样,我们同样可以使用这样一组类来提供应用程序和数据库之间的交互。
这里我打算做一个任务管理来体验windows mobile开发,因此建立了一个数据库如下
如何建立此数据库?可以在 visual studio 2008中的服务器管理器中连接到windows mobile的SQL Server CE
选择更改数据源,在更改数据源选项中选择Microsoft SQL Server Compact 3.5
选择ActiveSync连接的设备就能连接到windows mobile 5.0模拟器了,这里我们可以选择创建或打开已有的数据库,并设置密码,当然这里可以选择数据库存放的路径位置等。
数据库建立完成后我们便可以在应用程序中访问数据库了,
如上图所示我建立了一个TaskList项目,并写了一个简单的数据操作类完成插入和提取数据的功能。

using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlServerCe;
namespace MyMobileTaskList
{
class DB
{
public static string ConString = "Data Source=MyTask.sdf";
public static DataTable GetDataSet(string strSql)
{
SqlCeConnection con = new SqlCeConnection(ConString);
con.Open();
SqlCeDataAdapter sda = new SqlCeDataAdapter(strSql, con);
DataSet ds = new DataSet();
sda.Fill(ds);
con.Close();
return ds.Tables[0];
}
public static void InsertData(string strSql)
{
SqlCeConnection con = new SqlCeConnection(ConString);
con.Open();
SqlCeCommand cmd = new SqlCeCommand(strSql, con);
cmd.ExecuteNonQuery();
con.Close();
}
}
}
在AddTask.cs窗体中我们这样就可以直接调用了
窗体:

{
public AddTask()
{
InitializeComponent();
}
private void btnAdd_Click(object sender, EventArgs e)
{
string strInsert = " insert into tasklist(date,place,event) values ('" + Convert.ToDateTime( this.txtTime.Text) + "','" + this.txtPlace.Text + "','" + this.txtTask.Text + "') ";
DB.InsertData(strInsert);
//localhost.Hello webs = new MyMobileTaskList.localhost.Hello();
MessageBox.Show("任务添加成功!");
}
}
用来显示数据的窗体TaskList.cs的代码

{
public TaskList()
{
InitializeComponent();
this.dataGrid1.DataSource = DB.GetDataSet("select * from tasklist");
}
}
写到这里其实已经可以顺利访问数据库了,但是我这里还有个小问题,就是运行后在显示数据的这个界面点击时反应特别慢,甚至卡死。
请了解的朋友告知一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述