现在的位置: 首页 > 综合 > 正文

演练:使用 SQL Server CE 数据库

2013年12月11日 ⁄ 综合 ⁄ 共 8097字 ⁄ 字号 评论关闭

本节将指导您完成使用 Microsoft SQL Server 2000 Windows CE Edition (SQL Server CE) 数据库时需要执行的主要任务。假定您没有任何 SQL Server CE 数据库,需要在新的 Microsoft Visual Studio .NET 项目中创建新的数据库。

该演练包括以下任务:

  • 创建新的 SQL Server CE 数据库
  • 读取 SQL Server CE 数据库数据
  • 更改 SQL Server CE 数据库中的数据

阐释以上每个任务步骤的代码旨在一起运行。不能在任务中运行仅用于特定步骤的代码。有关完整代码列表,请参见代码列表:使用 SQL Server CE 数据库

创建新的数据库

SQL Server CE 中的数据库是存储结构化数据的表集合。在可以存储数据库之前,必须创建数据库。在创建数据库之后,可以创建保存数据的表。

在本节中,您将创建一个新的数据库,然后创建一个表,最后将数据添加到该表中。若要执行这些步骤,请使用 SQL Server CE (System.Data.SqlServerCe) .NET Framework 精简版数据提供程序的SqlCeConnectionSqlCeEngine
SqlCeCommand 类。

注意   不能在此任务中运行仅用于特定步骤的代码。有关完整代码列表,请参见代码列表:使用 SQL Server CE 数据库

创建新的 SQL Server CE 数据库

  1. 启动 Visual Studio .NET,然后打开一个新项目。
  2. 创建对使用的命名空间的引用。
    using System;
    using System.IO;
    using System.Text;
    using System.Data;
    using System.Data.SqlServerCe;
    using System.Collections;
    using System.Windows.Forms;
    using System.Data.Common;
    
  3. 创建 WalkThrough 类。
    public class WalkThrough 
    {
        static void Main() 
        {
            SqlCeConnection conn = null;
    
            try 
            {
    
  4. 验证具有您打算使用的名称的数据库是否已存在。
                if (File.Exists ("Test.sdf") )
                    File.Delete ("Test.sdf");
    
  5. 使用 System.Data.SqlCeEngine 对象创建名为 Test.sdf 的空数据库。

    注意   SQL Server CE 中,数据库名称的文件扩展名为 .sdf。

                SqlCeEngine engine = new SqlCeEngine ("Data Source = Test.sdf");
                engine.CreateDatabase ();
    
  6. 连接到这个新数据库。
    conn = new SqlCeConnection ("Data Source = Test.sdf");
    conn.Open();
    

创建新表

  1. 使用 System.Data.SqlCeCommand 创建命令类的实例。

    SqlCeCommand cmd = conn.CreateCommand();
    
  2. 运行命令 cmd 创建表。用于创建表的指令必须在 cmd.CommandText 所包含的 SQL 代码中。

    若要使用 SQL Server CE 的 SQL 编程语言创建表,请使用 CREATE TABLE 语法。有关更多信息,请参见《SQL Server CE 联机手册》中的用于 SQL Server CE 的 SQL 参考

    cmd.CommandText = "CREATE TABLE TestTbl(col1 int PRIMARY KEY, col2 ntext, col3 money)";
    cmd.ExecuteNonQuery();
    

将数据添加到新表中

  1. 运行命令以添加数据行。与创建表相同,用于添加行的指令也必须在 cmd.CommandText 所包含的 SQL 代码中。

    若要使用 SQL Server CE 的 SQL 编程语言将行添加到表中,请使用 INSERT 语法。有关更多信息,请参见《SQL Server CE 联机手册》中的用于 SQL Server CE 的 SQL 参考

    cmd.CommandText =  "INSERT INTO TestTbl(col1, col2, col3) VALUES (0, 'abc', 15.66)";
    cmd.ExecuteNonQuery();
    
  2. 创建命令,使用参数将数据多次插入表中。

    参数可以更高效地查询数据库,因为可以使用一组包含参数的 SQL 语句插入多个值。有关更多信息,请参见《SQL Server CE 联机手册》的在查询中使用参数

    cmd.CommandText = "INSERT INTO TestTbl(col1, col2, col3) VALUES (?, ?, ?)";
    
    cmd.Parameters.Add(new SqlCeParameter("p1", SqlDbType.Int));
    cmd.Parameters.Add(new SqlCeParameter("p2", SqlDbType.NText));
    cmd.Parameters.Add(new SqlCeParameter("p3", SqlDbType.Money));
    
    cmd.Parameters["p2"].Size = 50;
    
    cmd.Prepare();
    
  3. 执行参数化命令,将数据插入表中。
    cmd.Parameters["p1"].Value = 1;
    cmd.Parameters["p2"].Value = "abc";
    cmd.Parameters["p3"].Value = 15.66;
    cmd.ExecuteNonQuery();
    
  4. 清除参数,并检查已插入表中的数据。

    若要使用 SQL Server CE 的 SQL 编程语言读取现有数据,请使用 SELECT 语法。有关更多信息,请参见《SQL Server CE 联机手册》中的用于 SQL Server CE 的 SQL 参考

    cmd.Parameters.Clear();
    //Set the command text to a SELECT query.
    //
    cmd.CommandText = "SELECT * FROM TestTbl";
    

读取 SQL Server CE 数据库数据

读取数据库数据是一种常见的任务,通常涉及对表行信息的访问。为使用 System.Data.SqlServerCe 执行此任务,您需要SqlCeDataReader
SqlCeCommand 对象。

注意   有关完整代码列表,请参见代码列表:使用 SQL Server CE 数据库

  1. 调用 SqlCeCommand 对象的 ExecuteReader 方法以创建
    SqlCeDataReader
    的实例。

    SqlCeDataReader rdr = cmd.ExecuteReader();
    
  2. 指示数据读取器 rdr 在行存在时在每行的列中显示数据。
    while (rdr.Read())
    {MessageBox.Show("col1 = " + rdr.GetInt32(0) + 
         "col2 = " + rdr.GetString(1) + 
         "col3 = " + rdr.GetSqlMoney(2));
    }
    

更改 SQL Server CE 数据库中的数据

在创建表后,可以以多种方式修改表中的数据:更改特定数据的属性,添加和删除数据行,甚至还可以通过修改表中的列来更改存储数据的方式。

在本节中,您将更改表项的值,查找更改的表的数据并处理所有错误。为执行这些步骤,您将使用在前面的任务中使用的类:SqlCeCommandSqlCeDataReader。另外,您将使用
SqlCeException 进行错误处理。

注意   不能在此任务中运行仅用于特定步骤的代码。有关完整代码列表,请参见代码列表:使用 SQL Server CE 数据库

更新 SQL Server CE 表中的数据

  • 设置命令对象以使用 UPDATE 语句。

    若要使用 SQL Server CE 的 SQL 编程语言更改行列的值,请使用 UPDATE 语法。有关更多信息,请参见《SQL Server CE 联机手册》中的用于 SQL Server CE 的 SQL 参考

    cmd.CommandText = "UPDATE TestTbl SET col2 = 'some new value' WHERE col1 = 0";
    cmd.ExecuteNonQuery();
    

读取 SQL Server CE 表中的数据

  1. 设置命令对象以使用 SELECT 语句,然后通过执行 SqlCeCommand.ExecuteReader 创建数据读取器的实例。

                cmd.CommandText = "SELECT * FROM TestTbl";
    
                rdr = cmd.ExecuteReader();
    
                while (rdr.Read()) 
                {
                    MessageBox.Show(" col1 = " + rdr.GetInt32(0) + 
                        " col2 = " + rdr.GetString(1) +
                        " col3 = " + rdr.GetSqlMoney(2));
                }
    
            }
    
  2. 使用 SqlCeException 捕获任何错误,然后关闭与数据库的连接。
     catch (SqlCeException e) 
    {
          ShowErrors(e);
    }
    finally 
    {
       if(conn.State == ConnectionState.Open)
          conn.Close();
    }
    }
    
        public static void ShowErrors(SqlCeException e) 
        {
            SqlCeErrorCollection errorCollection = e.Errors;
    
            StringBuilder bld = new StringBuilder();
    
            foreach (SqlCeError err in errorCollection) 
            {
                bld.Append("\n Error Code: " + err.HResult.ToString("X"));
                bld.Append("\n Message   : " + err.Message);
                bld.Append("\n Minor Err.: " + err.NativeError);
                bld.Append("\n Source    : " + err.Source);
                    
                foreach (int numPar in err.NumericErrorParameters) 
                {
                    if (0 != numPar) bld.Append("\n Num. Par. : " + numPar);
                }
                    
                foreach (string errPar in err.ErrorParameters) 
                {
                    if (String.Empty != errPar) bld.Append("\n Err. Par. : " + errPar);
                }
    
                MessageBox.Show(bld.ToString());
                bld.Remove(0, bld.Length);
            }
        }
    }
    

有关 SQL Server CE 中的错误处理的更多信息,请参见《SQL Server CE 联机手册》中的错误处理

请参见

智能设备演练 |
SQL Server CE

System.Data.SqlServerCe 命名空间

Visual Studio 2010
2(共 2)对本文的评价是有帮助
- 评价此主题

System.Data.SqlServerCe 命名空间是用于 SQL Server Compact 4.0 的托管数据提供程序。此命名空间是类的集合,这些类提供对 SQL Server Compact 4.0 数据库的访问。通过使用
System.Data.SqlServerCe,您可以从计算机创建和管理 SQL Server Compact 4.0 数据库。 

以下功能可用于创建 SQL Server Compact 4.0 桌面应用程序和 Web 应用程序。

  • 支持 TransactionScope 类。

  • ADO.NET Entity Framework (System.Data.SqlServerCe.Entity.dll) 的 SQL Server Compact 4.0 提供程序。

  • Visual Studio 2010 SP1 中的对 Visual C# 和 Visual Basic 应用程序开发的支持。

  • 支持在中等(部分)信任环境下工作。

  • 为了在 ASP.NET Web 应用程序中使用 SQL Server Compact,需要设置标志 SQLServerCompactEditionUnderWebHosting。该标志已删除并且 SQL Server Compact 4.0 可以轻松地在 Web 应用程序中用作嵌入数据库。

  说明
公共类 ResultSetEnumerator 可用于循环访问 ResultSet 对象中的记录集合的枚举器。ResultSetEnumerator 不应从代码直接使用。直接使用
SqlCeResultSet 对象可以获得更多功能。
公共类 ResultSetView 实现数据绑定接口,并在用户界面控件与 SqlCeResultSet 之间起到桥梁作用。
公共类 RowView 基础结构。
公共类 SqlCeChangeTracking 提供可用于跟踪对 SQL Server Compact 数据库中的表所做更改的方法。
公共类 SqlCeCommand 表示对数据源执行的 SQL 语句。
公共类 SqlCeCommandBuilder 提供一种方法,以自动生成用于协调对 DataSet 所做的更改和关联数据库的单表命令。无法继承此类。
公共类 SqlCeConnection 表示到 SQL Server Compact 数据源的连接是打开的。
公共类 SqlCeConnectionStringBuilder 提供一个简单的方法以便创建和管理 SqlCeConnection 类使用的连接字符串的内容。
公共类 SqlCeDataAdapter 表示一组数据命令和一个数据库连接,它们用于填充 DataSet 和更新数据源。
公共类 SqlCeDataReader 提供从数据源读取数据行的只进流的方法。无法继承此类。
公共类 SqlCeEngine 表示 SQL Server Compact Engine 对象的属性、方法及其他对象。无法继承此类。
公共类 SqlCeError 收集与数据源返回的警告或错误有关的信息。无法继承此类。
公共类 SqlCeErrorCollection 收集 SQL Server Compact 的 .NET Compact Framework 数据访问接口产生的所有错误。无法继承此类。
公共类 SqlCeException 基础提供程序从 SQL Server Compact 数据源返回警告或错误时引发的异常。无法继承此类。
公共类 SqlCeFlushFailureEventArgs 封装 FlushFailure 事件的事件参数。
公共类 SqlCeInfoMessageEventArgs InfoMessage 事件提供数据。无法继承此类。
公共类 SqlCeInvalidDatabaseFormatException 在 SQL Server Compact 尝试打开较旧或较新版本的数据库文件时,在基础提供程序从 Microsoft SQL Server Compact 数据源返回错误时引发的异常。
公共类 SqlCeLockTimeoutException 如果已经达到锁超时,则会引发此异常。
公共类 SqlCeParameter 表示 SqlCeCommand 的参数,还可表示该参数到一个
DataSet 列的映射。无法继承此类。
公共类 SqlCeParameterCollection 收集与 SqlCeCommand 有关的所有参数以及它们各自到
DataSet 列的映射。
公共类 SqlCeProviderFactory 表示一组方法,这些方法用于创建访问接口对数据源类的实现的实例。
公共类 SqlCeRemoteDataAccess 初始化 SqlCeRemoteDataAccess 对象的新实例。有关远程数据访问的更多信息,请参见使用远程数据访问 (RDA)
公共类 SqlCeReplication 初始化 SqlCeReplication 对象的新实例。有关 SQL Server 复制的详细信息,请参阅 SQL Server 联机丛书。有关 SQL Server Compact 中合并复制的详细信息,请参阅 SQL Server Compact 联机丛书。
公共类 SqlCeResultSet 一个可更新、可滚动并且可绑定的游标。
公共类 SqlCeRowUpdatedEventArgs RowUpdated 事件提供数据。
公共类 SqlCeRowUpdatingEventArgs RowUpdating 事件提供数据。
公共类 SqlCeTransaction 表示要在数据源执行的 SQL 事务。无法继承此类。
公共类 SqlCeTransactionInProgressException 在尝试某个操作而某个事务正在进行中时,在基础提供程序从 Microsoft SQL Server Compact 数据源返回错误时引发的异常。
公共类 SqlCeType 基础结构。
公共类 SqlCeUpdatableRecord 表示数据源中一行可更新的值。SqlCeResultSet 对象包含一个或多个
UpdatableRecords
公共类 SqlMetaData 基础结构。指定并检索从数据库中检索的参数和列中的元数据信息。无法继承此类。

  委托 说明
公共委托 OnStartTableDownload 用户为开始从服务器下载表更改时激发的事件定义的委托。
公共委托 OnStartTableUpload 用户为开始将表更改上载到服务器时激发的事件定义的委托。
公共委托 OnSynchronization 一种用户定义的委托,使用调解程序工作期间报告的正在执行的同步事件。
公共委托 SqlCeFlushFailureEventHandler 必须实现侦听 FlushFailure 事件的委托。
公共委托 SqlCeInfoMessageEventHandler 表示将处理 SqlCeConnection
InfoMessage 事件的方法。
公共委托 SqlCeRowUpdatedEventHandler 表示将要处理 SqlCeDataAdapter
RowUpdated 事件的方法。
公共委托 SqlCeRowUpdatingEventHandler 表示处理 SqlCeDataAdapter
RowUpdating 事件的方法。

  枚举 说明
公共枚举 AddOption 确定在添加订阅时是将订阅添加到现有数据库还是创建新的数据库。
公共枚举 CommitMode 当传递给 Commit 函数时,CommitMode 指定发生提交的时间。
公共枚举 DbInsertOptions 指定在使用 [System.Data.SqlServerCe.SqlCeResultSet.Insert] 方法时要使用的选项。
公共枚举 DbRangeOptions 指定在指定要查找的索引范围时,SetRange 方法使用的选项。
公共枚举 DbSeekOptions 指定 Seek 方法将如何对索引进行搜索的选项。
公共枚举 DropOption 指定使用 DropSubscription 方法删除订阅时,是保留还是删除数据库。
公共枚举 ExchangeType 指定仅将数据合并到发布服务器还是在发布服务器和订阅服务器之间进行双向合并。
公共枚举 NetworkType 指定在设置 SqlCeReplication 对象的
DistributorNetwork
PublisherNetwork 属性时使用的网络协议。
公共枚举 PurgeType 指定当使用 SqlCeChangeTracking 类的
PurgeTombstoneTableData 方法或
PurgeTransactionSequenceData 方法时用于清除元数据的条件。
公共枚举 RdaBatchOption 指定是否将与 Push 相关联的行组成一批,归并到单个事务中。
公共枚举 RdaTrackOption 指定是否跟踪正被提取到设备的表。
公共枚举 RepairOption 当传递给 Repair 方法时,RepairOption
指定要执行的数据库修复类型。
公共枚举 ResultSetOptions 设置 ResultSetEnumerator 的选项。
公共枚举 ResultSetSensitivity 设置 ResultSetEnumerator 的敏感度。
公共枚举 SecurityType 指定复制期间在连接到发布服务器或分发服务器时要使用的安全模式。
公共枚举 SnapshotTransferType 控制如何将快照文件从分发服务器传输到运行 IIS 的计算机。
公共枚举 TrackingKeyType 指定用于标识跟踪数据的键的类型。
公共枚举 TrackingOptions 指定要跟踪的表操作。
公共枚举 ValidateType 指定要执行的数据验证的类型。
公共枚举 VerifyOption 这些选项确定要使用的数据库验证的级别。

抱歉!评论已关闭.