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数据库应用的更多相关文章

  1. 初试 Windows XP Embedded 系统开发1

    目前 Windows PE(Preinstallation Environment)和 Windows XP Embedded 是可以脱离主机里的硬盘独立运行的 Windows 操作系统,Window ...

  2. WinCE的开发流程

    总的来说,WinCE的开发是分为: 一.硬件开发:硬件设计,Boot Loader开发,OAL开发,BSP开发二.操作系统开发:定制驱动,创建最小内核,定制操作系统组件,测试集成三.应用程序开发:开发 ...

  3. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  4. 基于SSH框架的网上书店系统开发的质量属性

    基于SSH框架的网上书店系统开发的质量属性 对于我的基于SSH框架的网上书店系统的开发要实现的质量属性有可用性.可修改性.性能.安全性.易用性和可测试性. 1.对于可用性方面的战术: 可用性(Avai ...

  5. 基于JSP+Servlet开发手机销售购物商城系统(前台+后台)源码

    基于JSP+Servlet开发手机销售购物商城系统(前台+后台) 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat+MySQL数据库 运行效果图: ...

  6. 基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  7. 基于ssh框架开发的购物系统的质量属性

    根据前面的博客,我们已经大致了解了ssh架构开发整体概念:Struts是一个实现了MVC模式的经典的框架:Hibernate是轻量级Java EE应用的持久层解决方案,以面向对象的方式提供了持久化类到 ...

  8. Atitit  基于meta的orm,提升加速数据库相关应用的开发

    Atitit  基于meta的orm,提升加速数据库相关应用的开发 1.1. Overview概论1 1.2. Function & Feature功能特性1 1.2.1. meta api2 ...

  9. 开发一个基于 Android系统车载智能APP

    很久之前就想做一个车载相关的app.需要实现如下功能: (1)每0.2秒更新一次当前车辆的最新速度值. (2)可控制性记录行驶里程. (3)不连接网络情况下获取当前车辆位置.如(北京市X区X路X号) ...

随机推荐

  1. LVS(二):四种工作模型

    面试的时候必问这个四种工作模式,因为这几乎是企业里面必用的内容,所以一定要将其理解通透. 一.lvs-nat模式 二.LVS-DR模式(默认) 三.LVS-tun模式 四.LVS-fullnat模式 ...

  2. Java虚拟机所管理的内存,包含的运行时数据区域?

    运行时数据区域 线程私有(随用户线程的启动和结束而建立和销毁)或所有线程共享(随虚拟机进程的启动而存在) 抛出的异常 备注 程序计数器(Program Counter Register) 线程私有 唯 ...

  3. MySQL数据库 介绍,安装,基本操作

    - 数据库介绍: 1.随意存放在一个文件中的数据,数据的格式千差万别 tank|123 jason:123 sean~123 2.软件开发目录规范 - Project: - conf - bin - ...

  4. MyBatis 插入记录同时获取主键

    MyBatis 插入记录同时获取主键 MyBatis 插入记录同时获取主键的系统界面 useGeneratedKeys 属性 keyProperty 属性 keyColumn 属性 selectKey ...

  5. Spring Data介绍

    Spring Data是Spring 的一个子项目.用于简化数据库访问,支持NoSQL和关系数据库存储.其主要目标是使数据库的访问变得方便快捷. Spring Data 项目所支持NoSQL存储: M ...

  6. Matlab c2d()函数的用法

    1.c2d()函数的用法 c2d()函数的作用是将s域的表达式转化成z域的表达式,s=0对应z=1. c2d()函数转化的方法有多种: ①zoh, 零阶保持器法,又称阶跃响应不变法: ②foh ,一阶 ...

  7. 在WEB显示实时视频流

    转载自:https://www.jianshu.com/p/7ef5490fbef7 安装摄像头 这里使用的是树莓派的官方摄像头,使用普通的 USB 摄像头也可以,但前提是你能够搞的定它的驱动. 大概 ...

  8. 13 opencv训练器

    https://blog.csdn.net/WZZ18191171661/article/details/91305466 https://blog.csdn.net/qq_25352981/arti ...

  9. Spring Cloud微服务安全实战_4-1_微服务网关安全_概述&微服务安全面临的挑战

      第四章  网关安全 这一章从简单的API的场景过渡到复杂的微服务的场景 4.1 概述 微服务安全面临的挑战:介绍中小企业的一个微服务架构,相比第三章的单体应用的简单的API所面临的哪些挑战 OAu ...

  10. linux下找到JVM占用资源最高的线程

    linux的top命令不仅可以看线程的资源占用,还可以看进程下线程的资源占用,结合对应的java命令可以定位到具体有问题的Java代码,以找出占用CPU最高的线程为例: 第一步: 通过 top命令查找 ...