.NET Compact Framework下SQL CE的使用

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

在Wince和Windows Mobile下最常用的数据库为SQL CE,SQL CE也曾经叫做SQL Server for Windows CE和SQL Server Mobile Edition,最新版本命名为SQL Server Compact 3.5 SP1。 SQL Server Compact不仅仅能运行于Wince和Windows Mobile,而且能运行于Windows的PC上,是Access的有效替代品,如果不使用存储过程,在SQL Server Compact下开发的程序几乎可以无修改移植到SQL Server的其他服务器版本上。可以参见这篇文章 SQL Server Express和SQL Server Compact的应用  。在这篇文章中我会使用SQL CE这一命名。


在.NET Compact Framework下进行SQL CE使用和开发,需要应用库System.Data.SqlServerCe.dll,需要注意的是不同的SQL CE版本使用不用的DLL版本. SQL CE 3.5的库一般对应以下的目录 C:\Program Files\Microsoft SQL Server Compact Edition\v3.5 ADO.net DLL,而SQL CE 3.0的库一般对应以下的目录 C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile,彼此不相兼容。由于开发的命名空间(namespace)是一致的,所以开发的程序可以用在不用的SQL CE版本。

 

helper类

下面演示的是一个SQL CE的helper类,这个类只是针对SQL CE数据库,没有考虑移植到其他数据库,所以所有的类都使用SQL CE相关的类。

 

复制代码
     class  SqlCeHelper : IDisposable
    {
        
private  SqlCeConnection connection;
        
private  SqlCeCommand command;
        
private   const   string  connectionString  =   " Data Source=/DB/db.sdf " ;

        
#region  Open/Close
        
public   void  Open()
        {
            
try
            {
                connection 
=   new  SqlCeConnection(connectionString);
                command 
=  connection.CreateCommand();
                command.Connection 
=  connection;
                command.CommandType 
=  CommandType.Text;

                connection.Open();
            }
            
catch  (DataException e)
            {
                Console.WriteLine(e.Message);
            }
        }

        
public   void  Close()
        {
            connection.Close();
            connection.Dispose();
        }

        
public   void  Dispose()
        {
            connection.Close();
            connection.Dispose();
            command.Dispose();
        }
        
#endregion

        
#region  Operatons
        
public  SqlCeDataReader ExecuteReader( string  sql)
        {
            command.CommandText 
=  sql;
            SqlCeDataReader reader 
=   null ;
            
try
            {
                reader 
=  command.ExecuteReader();
            }
            
catch  (DataException e)
            {
                Console.WriteLine(e.Message);
            }
            
return  reader;
        }

        
public  DataSet ExecuteDataSet( string  sql)
        {
            command.CommandText 
=  sql;
            SqlCeDataAdapter adapter 
=   new  SqlCeDataAdapter(command);
            DataSet ds 
=   new  DataSet(); ;

            
try
            {
                adapter.Fill(ds);
            }
            
catch  (DataException e)
            {
                Console.WriteLine(e.Message);
            }
            
return  ds;
        }

        
public   int  ExecuteNonQuery( string  sql)
        {
            command.CommandText 
=  sql;
            
int  result  =   - 1 ;

            
try
            {
                result 
=  command.ExecuteNonQuery();
            }
            
catch  (DataException e)
            {
                Console.WriteLine(e.Message);
                
            }
            
return  result;
        }

        
public   object  ExecuteScalar( string  sql)
        {
            command.CommandText 
=  sql;
            
object  o  =   null ;
            
try
            {
                o 
=  command.ExecuteScalar();
            }
            
catch  (DataException e)
            {
                Console.WriteLine(e.Message);
            }
            
return  o;
        }
        
#endregion

        
#region  Transaction
        
public   void  BeginTransaction()
        {
            command.Transaction 
=  connection.BeginTransaction();
        }

        
public   void  CommitTransaction()
        {
            command.Transaction.Commit();
        }

        
public   void  RollbackTransaction()
        {
            command.Transaction.Rollback();
        }
        
#endregion
    }
复制代码

1.建立SQL CE的连接(SqlCeConnection)只需要指定数据库文件路径,在这个类,我hardcode了文件路径,在实际应用中,可以在构造函数进行初始化,或者在Open函数中传递连接串参数。
2.由于SQL CE当前版本不支持存储过程,所以SqlCeCommand的CommandType指定为CommandType.Text,只支持执行SQL语句。
3.实现了通用操作方法ExecuteReader,ExecuteDataSet,ExecuteNonQuery和ExecuteScalar。
4.SQL CE支持事务(Transaction)。

使用

上图为使用例子的表结构。

复制代码
            SqlCeHelper sqlCe  =   new  SqlCeHelper();

            sqlCe.Open();

            sqlCe.BeginTransaction();
            
if  (sqlCe.ExecuteNonQuery( " delete from t " <   0 )
            {
                sqlCe.RollbackTransaction();
                
return ;
            }

            
if  (sqlCe.ExecuteNonQuery( " insert into t (f1, f2) values (1, 'abc') " <   0 )
            {
                sqlCe.RollbackTransaction();
                
return ;
            }

            SqlCeDataReader reader 
=  sqlCe.ExecuteReader( " select * from t where f1 = 1 " );
            
while  (reader.Read())
            {
                Console.WriteLine(
" reader: f2:{0}\n " , reader[ " f2 " ]);
            }
            
if  ( ! reader.IsClosed)
            {
                reader.Close();
            }

            
if  (sqlCe.ExecuteNonQuery( " update t set f2 = 'xyz' " <   0 )
            {
                sqlCe.RollbackTransaction();
                
return ;
            }

            DataSet ds 
=  sqlCe.ExecuteDataSet( " select * from t " );
            
foreach  (DataRow dr  in  ds.Tables[ 0 ].Rows)
            {
                Console.WriteLine(
" dataset: f2:{0}\n " , dr[ " f2 " ]);
            }

            sqlCe.CommitTransaction();
            sqlCe.Close();
复制代码

使用这个Helper类很简单,先生成这个类的实例,打开数据库连接,使用ExecuteReader和ExecuteDataSet进行查询操作,使用ExecuteNonQuery进行增删改的操作。在操作过程中,同时可以加入事务处理操作,使用完毕关闭数据库连接。

参考文献

System.Data.SqlServerCe Namespace


    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/04/08/1431361.html,如需转载请自行联系原作者



相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
61 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
6月前
|
关系型数据库 MySQL 数据库
找不到请求的 .Net Framework Data Provider。可能没有安装
做的一个项目,框架为.net framework 数据库为mysql 出现如标题错误 检查是否安装mysql、是否安装mysql connector net 笔者是因为没有安装后者mysql connector net 下载地址: [mysql connector net](https://downloads.mysql.com/archives/c-net/ "mysql connector net") 笔者安装截图如下: ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/c
56 0
|
6月前
|
C# Windows
[记录]c#.net framework 4.5调用运行时库
[记录]c#.net framework 4.5调用运行时库
|
1月前
|
Windows
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
|
6月前
|
Windows
​史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)
​史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)
541 0
|
2月前
|
SQL 开发框架 .NET
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
32 0
|
4月前
|
SQL 数据库连接 数据库
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
89 0
|
4月前
|
C# Windows
C#安装“Windows 窗体应用(.NET Framework)”
C#安装“Windows 窗体应用(.NET Framework)”
50 0
|
7月前
|
开发框架 .NET 编译器
C#OOP之十四 .Net Framework简介
C#OOP之十四 .Net Framework简介
52 0
|
9月前
|
SQL 开发框架 前端开发
ASP.NET Core+Element+SQL Server开发校园图书管理系统(完)
ASP.NET Core+Element+SQL Server开发校园图书管理系统(完)
94 0