SQL CE数据库的C#编程

 2007-11-27         [nemail]    
[lablebox]

        基于WinCE操作系统的ARM9系列嵌入式网络模块(如EM9000),自英创公司推出以来,以其稳定可靠的运行性能、完善的硬件接口、方便的开发工具(VC或VS.NET),在各个行业得到了广泛的应用。由于微软的最新开发工具Visual Studio.NET 2005支持使用C#语言进行应用开发,客户可以更方便地构筑应用界面并调用方便可靠的API,越来越多的客户选用它作为嵌入式设备开发调试工具。在应用中,客户经常要使用到嵌入式本地数据库进行数据库建立、数据查询、删除等功能,针对此情况,我们在此对使用C#2005进行SQL CE 2.0本地数据库开发进行介绍,并提供相应的例程。

 

        客户在进行SQL CE数据库开发之前应已满足如下条件:

        1、确认其使用的ARM9模块支持SQL CE数据库开发。(客户如无特殊配置要求,英创ARM9系列模块均缺省支持SQL CE 2.0数据库)

        2、开发主机已经安装了Visual Studio.NET 2005

        3、客户已经阅读过英创相关文档《使用VS2005连接和调试英创ARM9嵌入式模块》,并能成功地使用C#进行程序的连接和调试

 

        作为SQL CE开发的必要条件,必须在安装了VS.NET 2005的开发主机上安装Microsoft .NET Compact Framework SP2。该程序可在Microsoft网站上免费下载。英创开发光盘的“SOFTWARE\CSharp2005\CSharp软件工具”目录下也提供了此程序,程序名NETCFSetupv2(sp2).msi,双击运行它即可进行安装,安装过程按照其提示的缺省选择即可。

 

        安装完毕后,即可进入程序的开发。客户按照《使用VS2005连接和调试英创ARM9嵌入式模块》的步骤创建工程项目后,要想在本项目中操作数据库,首先要添加对System.Data.SqlServerCe.dll动态链接库的引用,步骤如下:

        1、在集成开发环境中,对“解决方案资源管理器”中的“引用”单击右键,并单击“添加引用”。

 

        2、在弹出的“添加引用”对话框选项卡里选“浏览”,并查找目录【C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v2.0】,可以看到System.Data.SqlServerCe.dll,选择它并“确定”。

 

        3、可以看到“解决方案资源管理器”中的“引用”下已经添加了对System.Data.SqlServerCe的引用。

 

        但是光是在“解决资源管理器”的“引用”下添加还不行,还必须在程序的起始using语句中添加:using System.Data.SqlServerCe; 语句,应用程序才能直接调用相关的类和函数。

 

        英创公司提供了一个小型但是基本功能具备的C#应用程序源代码供客户参考,客户可以在应用光盘的如下目录找到这个工程:【SOFTWARE\CSharp2005\SQLCE_001】,里面有比较详细的注释供客户参考,客户在参考本程序之前可以先将此程序进行编译下载并在目标系统上运行,本例程在目标板上运行的界面如下:

 

程序界面及功能说明

        四个功能按钮:

        ●  数据库及表创建按钮:创建名称为Leedata.sdf的数据库,并在数据库下建立一个Products表;创建完毕后按钮自动灰化。

        ●  插入记录按钮:在Products表里插入8条固定内容的产品记录;插入后按钮自动灰化。

        ●  执行查询按钮:将Products表里8条记录的产品名称Name字段读出,并将其作为选择项显示在下拉菜单框里;完毕后,显示缺省选中记录的各个字段到文本框;执行后按钮自动灰化。

        ●  删除记录按钮:将当前选中显示的记录从Products表中删除;删除完毕后程序会自动重新载入下拉菜单,并重新载入缺省记录显示;当8条记录均被删除完毕Products成为空表后,本按钮自动灰化,并激活插入记录按钮。

        一个下拉菜单框:载入Products表里各条记录的产品名称Name字段,并供用户选择查询。

        五个文本框:显示当前被选中记录的各项字段值。

 

需要注意的语言点

        1、AppPath=System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase.ToString()); ///获取当前目录路径

 

        2、SqlCeEngine eng = new SqlCeEngine('Data Source=' + slocalDatabaseName);

        eng.CreateDatabase();

        // 创建数据库,在SQL CE里只能通过此方法创建数据库

 

        3、SqlCeConnection localConnection = new SqlCeConnection('Data Source=' + slocalDatabaseName);

        localConnection.Open();

        // 连接打开数据库

 

        4、SqlCeCommand cmdCmd = new SqlCeCommand(SQL语句字符串, localConnection);

        cmdCmd.CommandType = CommandType.Text;

        cmdCmd.ExecuteNonQuery();

        // 进行一次SQL操作的通用方法

 

        5、SqlCeDataReader dr;

        SqlCeCommand cmdGetData = new SqlCeCommand('SELECT 字段 FROM ', localConnection);

        dr = cmdGetData.ExecuteReader();

        while (dr.Read()){…}

        // 查询方法的一种

 

        6、SqlCeCommand cmdGetData = new SqlCeCommand();

        SqlCeDataReader dr;

        cmdGetData.Connection = localConnection;

        cmdGetData.CommandType = CommandType.TableDirect;

        cmdGetData.CommandText = ;

        cmdGetData.IndexName = 某字段的索引名;

        dr = cmdGetData.ExecuteReader();

        dr.Seek(DbSeekOptions...., ...);

        if (dr.Read()) {...}

        // 又一种查询方法

[lablebox]