基于wince系统开发的 SQLServe Mobile数据库应用
SQLServe Mobile数据库以前的版本是SQLServe CE,现在最新的是3.5的版本,最近用vs2008做了一个小程序,是对SQLServe Mobile数据库读写数据。
注:SQLServe Mobile数据库安装已经有人写过了,这里不再赘述。
1、界面是四个button按钮,分别是“插入数据”、“读取数据”、“删除数据”、“退出系统”和一个detagrid控件;两个textbox控件,方便录入插入的数据。
数据库文件时myDB.sdf 用SQL Server2008创建的,方法是:打开连接,服务器类型选择“SQL Server Compact
Edition”,数据库文件选择“创建新数据库”,然后根据提示创建数据库文件。需要注意的是,加密类型选择后两种,然后把数据库文件放到设备的NandFlash里(我测试用的设备是飞淩家的TE6410)。
项目中要引用“System.Data.SqlServerCe”,并且需要添加三个dll文件:sqlceme35.dll,sqlceqp35.dll,sqlcese35.dll,开发平台不安装SQLServe Mobile数据库是不能引用“System.Data.SqlServerCe”的,我安装的是英文版的Mobile数据库,这些文件在网上都能找到。
2、代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 定义连接字符串
/// </summary>
///
public string connectionString = "Data Source=\\NandFlash\\myDB.sdf;Database Password=xxxxx;";
private void button_Insert_Click(object sender, EventArgs e)
{
APP_function.CloseKeyBoard();//关闭软键盘
string name = this.textBox_Name.Text;
string pass = this.textBox_Pass.Text;
SqlCeParameter[] sqlParameters=new SqlCeParameter[2];
sqlParameters[0] = new SqlCeParameter("@Name", textBox_Name.Text);
sqlParameters[1] = new SqlCeParameter("@Password", textBox_Pass.Text);
string sqlCmd = "insert into userinfo (用户名,密码) values (@Name,@Password)";
if (name != "" || pass != "")
{
APP_function.P_ExecuteNonQuery(sqlCmd,connectionString,ref sqlParameters);
//更新datagrid
string sqlUpdataCmd = "select * from userinfo order by ID";
DataSet ds = new DataSet();
APP_function.ExecuteDataset(sqlUpdataCmd, connectionString, out ds);
dataGrid_Read.DataSource = ds.Tables[0];
ifReadSelected = true;
textBox_Name.Text = "";
textBox_Pass.Text = "";
}
else
{
MessageBox.Show("插入的用户名和密码不能为空!");
}
}
private void button_Read_Click(object sender, EventArgs e)
{
string sqlCmd = "select * from userinfo order by ID";
try
{
DataSet ds = new DataSet();
APP_function.ExecuteDataset(sqlCmd, connectionString, out ds);
dataGrid_Read.DataSource = ds.Tables[0];
ifReadSelected = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
/// <summary>
/// 定义是否选择了读数据变量ifReadSelected
/// </summary>
public static bool ifReadSelected = false;
private void button_Delete_Click(object sender, EventArgs e)
{
if (ifReadSelected)
{
//取得主键的值
DataGridCell selectCell = dataGrid_Read.CurrentCell;
int id = Convert.ToInt32(dataGrid_Read[selectCell.RowNumber, 0].ToString());
string sqlCmd = "delete userinfo where ID='" + id + "'";
APP_function.ExecuteNonQuery(sqlCmd, connectionString);
//更新datagrid
string sqlUpdataCmd = "select * from userinfo order by ID";
DataSet ds = new DataSet();
APP_function.ExecuteDataset(sqlUpdataCmd, connectionString, out ds);
dataGrid_Read.DataSource = ds.Tables[0];
}
else
{
MessageBox.Show("请选择删除的行!","提示");
}
}
private void textBox_Name_GotFocus(object sender, EventArgs e)
{
//打开键盘
APP_function.OpenKeyBoard();
}
private void textBox_Pass_GotFocus(object sender, EventArgs e)
{
//打开键盘
APP_function.OpenKeyBoard();
}
private void button_Exit_Click(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
}
3、APP_function是另外一个类文件,其中定义了需要的功能函数,代码如下:
public partial class APP_function
{
/// <summary>
/// 打开、关闭软键盘
/// </summary>
public static uint SIPF_OFF = 0x00;//软键盘关闭
public static uint SIPF_ON = 0x01;//软键盘打开
[DllImport("coredll.dll")]
public extern static void SipShowIM(uint dwFlag);
public static void OpenKeyBoard()
{
SipShowIM(SIPF_ON);
}
public static void CloseKeyBoard()
{
SipShowIM(SIPF_OFF);
}
/// <summary>
/// 向数据库插入、更新、删除数据(不带参数)
/// </summary>
/// <param name="sqlCmd">命令字符串</param>
/// <param name="connectionString">连接字符串</param>
///
public static void ExecuteNonQuery(string sqlCmd, string connectionString)
{
using (SqlCeConnection conn=new SqlCeConnection(connectionString))
{
try
{
using (SqlCeCommand cmd = new SqlCeCommand(sqlCmd, conn))
{
conn.Open();
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString(),"提示");
}
finally
{
conn.Close();
}
}
}
/// <summary>
/// 带参数向数据库插入、更新、删除数据
/// </summary>
/// <param name="sqlCmd">命令字符串</param>
/// <param name="connectionString">连接字符串</param>
///
static public void P_ExecuteNonQuery(string sqlCmd,string connectionString,ref SqlCeParameter[] sqlParameters)
{
using (SqlCeConnection conn = new SqlCeConnection(connectionString))
{
try
{
using (SqlCeCommand cmd = new SqlCeCommand(sqlCmd, conn))
{
conn.Open();
cmd.CommandType = CommandType.Text;
for (int i = 0; i < sqlParameters.Length;i++ )
{
cmd.Parameters.Add(sqlParameters[i]);
}
cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString(), "提示");
}
finally
{
conn.Close();
}
}
}
/// <summary>
/// 查询数据库,返回dataset
/// </summary>
/// <param name="sqlCmd">命令字符串</param>
/// <param name="connectionString">连接字符串</param>
/// <param name="connectionString">连接字符串</param>
///
public static void ExecuteDataset(string sqlCmd, string connectionString, out DataSet ds)
{
ds = new DataSet();
using(SqlCeConnection conn=new SqlCeConnection(connectionString))
{
try
{
using(SqlCeDataAdapter da=new SqlCeDataAdapter())
{
da.SelectCommand = new SqlCeCommand(sqlCmd, conn);
da.Fill(ds);
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
conn.Close();
}
}
}
}
基于wince系统开发的 SQLServe Mobile数据库应用的更多相关文章
- 初试 Windows XP Embedded 系统开发1
目前 Windows PE(Preinstallation Environment)和 Windows XP Embedded 是可以脱离主机里的硬盘独立运行的 Windows 操作系统,Window ...
- WinCE的开发流程
总的来说,WinCE的开发是分为: 一.硬件开发:硬件设计,Boot Loader开发,OAL开发,BSP开发二.操作系统开发:定制驱动,创建最小内核,定制操作系统组件,测试集成三.应用程序开发:开发 ...
- 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上
博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813 本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...
- 基于SSH框架的网上书店系统开发的质量属性
基于SSH框架的网上书店系统开发的质量属性 对于我的基于SSH框架的网上书店系统的开发要实现的质量属性有可用性.可修改性.性能.安全性.易用性和可测试性. 1.对于可用性方面的战术: 可用性(Avai ...
- 基于JSP+Servlet开发手机销售购物商城系统(前台+后台)源码
基于JSP+Servlet开发手机销售购物商城系统(前台+后台) 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat+MySQL数据库 运行效果图: ...
- 基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- 基于ssh框架开发的购物系统的质量属性
根据前面的博客,我们已经大致了解了ssh架构开发整体概念:Struts是一个实现了MVC模式的经典的框架:Hibernate是轻量级Java EE应用的持久层解决方案,以面向对象的方式提供了持久化类到 ...
- Atitit 基于meta的orm,提升加速数据库相关应用的开发
Atitit 基于meta的orm,提升加速数据库相关应用的开发 1.1. Overview概论1 1.2. Function & Feature功能特性1 1.2.1. meta api2 ...
- 开发一个基于 Android系统车载智能APP
很久之前就想做一个车载相关的app.需要实现如下功能: (1)每0.2秒更新一次当前车辆的最新速度值. (2)可控制性记录行驶里程. (3)不连接网络情况下获取当前车辆位置.如(北京市X区X路X号) ...
随机推荐
- 曹玉中-201871010105《面向对象程序设计(java)》第6-7周学习总结
曹玉中-201871010105<面向对象程序设计(java)>第6-7周学习总结 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.c ...
- appium--Capability的配置
前戏 desired appium的功能是配置Appium会话,他们告诉appium服务器你想要自动化的平台的程序 Desired Capability是一组设置的键值对的集合,其中键对应设置的名称, ...
- Linux权限及归属管理 磁盘管理 文件系统 LVM管理
第五六七章 alias 查看系统别名 67 chmod 设置文件或目录的权限 -R表示以递归的方式设置目录及目录下的所有子目录及文件的权限 u:属主 g:属组 o:其他人 a:所有人 +:添加 ...
- Codeforces Round #545 (Div. 2) 交互 + 推公式
https://codeforces.com/contest/1138/problem/F 题意 有一条长为t的链,一个长为c的环,定义终点为链和环相连环上的第一个点,现在有10个人在起点,你每次可以 ...
- 日常笔记4关于cin、cin.get()、cin.getline()、getline()使用区别
1.关于PAT中段错误 使用字符数组出现错误: char str[256]; 报错段错误,然后改用C++中的string 改成: string str; 同char数组一样,也可以使用下标来取单个字符 ...
- 修改hadoop/hbase/spark的pid文件位置
1.说明 当不修改PID文件位置时,系统默认会把PID文件生成到/tmp目录下,但是/tmp目录在一段时间后会被删除,所以以后当我们停止HADOOP/HBASE/SPARK时,会发现无法停止相应的进程 ...
- [LeetCode] 633. Sum of Square Numbers 平方数之和
Given a non-negative integer c, your task is to decide whether there're two integers a and b such th ...
- UDF——读取文件作为边界条件(类似profile的效果)
本文编译工具:VC++ UDF Studio 该插件可以直接在Visual Studio中一键编译.加载.调试UDF源码,极大提高编写排错效率,且支持C++,MFC,Windows API和第三方库, ...
- c# DataGridView在使用DataSource时,只显示指定的列或禁止自动生成列
可通过设置DataGridView控件的AutoGenerateColumns属性来处理. //禁止自动生成列,以下场景会用到:数据源的列超过需要展示的列 this.gridDevice.AutoGe ...
- pyqt中pyrcc和pyuic的使用
一.pyrcc的使用 1.1 作用 将资源文件转换成py文件,并在主程序引入 1.2 资源文件编写说明 新建resource.qrc,代码如下: <!DOCTYPE RCC><RCC ...