SQL Server Everywhere 入门






4.05/5 (12投票s)
2006年7月7日
4分钟阅读

101011

1393
如何在 C# 程序中使用 SQL Server Everywhere。
引言
本文介绍如何在 C# 程序中以编程方式使用 SQL Server Everywhere(嵌入式)。
背景
Microsoft 发布了一个嵌入式版本的 SQL Server,称为 SQL Server Everywhere。它目前提供 CTP 版本(Community Technical Preview),因此尚未准备好用于生产代码。它是 SQL Server 的一个小型版本,可以嵌入到程序中。它实际上是 SQL Server 移动版,可以在任何地方使用(不再局限于移动平台)。
安装 SQL Server Everywhere
首先,从其产品 主页 下载 SQL Server Everywhere。截至撰写本文时,右上角有一个指向 CTP 版本的链接。还有一个单独下载的文档。只需像往常一样下载并安装。
有一个 SQL Server Everywhere 博客。还有一个 FAQ。
创建一个项目
在此示例中,我在 Visual Studio 中创建了一个 C# Windows 应用程序项目。然后,我添加了一些组件,例如用于 SQL 查询的 TextBox
,以及一个 DataGridView
来显示查询结果。
添加 SQL Server Everywhere 支持
Visual Studio 需要知道如何访问 SQL Server Everywhere。这通过在解决方案资源管理器窗口中添加对 "System.Data.SqlServerCe.dll" 文件的引用来完成。该 DLL 文件位于安装 SQL Server Everywhere 的文件夹中(在我的机器上是 "E:\Program Files\Microsoft SQL Server Everywhere\v3.1")。
添加引用后,就可以像往常一样访问 SQL Server Everywhere 元素了。
// By including the namespace:
using System.Data.SqlServerCe;
// By direct qualification:
System.Data.SqlServerCe.<something>
创建数据库
SQL Server Everywhere 创建数据库文件来保存数据库。单个数据库存储在一个文件中,扩展名为 ".sdf"。程序可以同时访问多个文件中的多个数据库。甚至还有锁定机制,允许多个进程和/或程序同时访问同一个数据库文件(并存在通常的并发问题)。
SqlCeEngine
SqlCeEngine
类用于管理数据库。它允许您创建、修改和删除数据库文件。
在此示例中,我使用它来创建数据库。
SqlCeEngine engine = new SqlCeEngine("Data Source='Test.sdf';");
if (!(File.Exists("Test.sdf")))
engine.CreateDatabase();
第一行创建一个引擎实例,然后将其与数据库文件 "Test.sdf" 关联。
如果文件尚不存在,则第二行使用 engine.CreateDatabase()
调用创建它。
使用数据库
以下是使用已创建数据库的常用步骤:
- 连接到数据库。
- 创建并执行命令。
- 读取结果。
使用 SqlCeConnection 连接
SqlCeConnection
类用于创建到数据库的连接。
SqlCeConnection connection =
new SqlCeConnection(engine.LocalConnectionString);
connection.Open();
第一行使用与引擎相同的连接字符串创建到数据库的连接。如果已知数据库存在,实际上无需创建引擎对象即可访问数据库中的数据。
第二行打开连接,以便可以发出命令。
请记住,在使用完连接后将其关闭,以免它在垃圾回收前不必要地占用资源。
使用 SqlCeCommand 执行命令
SqlCeCommand
类用于通过连接将命令发送到数据库。
SqlCeCommand command = connection.CreateCommand();
command.CommandText = "SELECT count(*) FROM customer";
int result = (System.Int32)(command.ExecuteScalar());
第一行使用连接创建一个命令。这样,命令就与连接关联起来了。
第二行设置要执行的 SQL 命令。
最后,在数据库上执行命令。当查询返回一个简单值时(例如此示例中的 int
),可以使用 command.ExecuteScalar()
调用。
使用 SqlCeDataReader 读取复杂结果
SqlCeDataReader
类可用于处理具有多行和/或多列的查询结果。
command.CommandText = "SELECT * FROM customer";
SqlCeDataReader dataReader = command.ExecuteReader();
while (dataReader.Read())
{
for (int i = 0; i < dataReader.FieldCount; i++)
{
string value = dataReader.GetValue(i).ToString();
}
}
数据必须一次一行地读取。只要可以获得新行,dataReader.Read()
调用就会返回 true
。每一行包含 dataReader.FieldCount
列。每个单元格的值都可以根据结果以各种格式读取(Int32
值必须使用 dataReader.GetInt32()
读取,依此类推)。
for (int i = 0; i < dataReader.FieldCount; i++)
{
string column = dataReader.GetName(i);
}
列名使用 dataReader.GetName()
读取。
关注点
数据库文件 "Test.sdf" 存储在 "\bin\Debug" 文件夹中,但可以更改。对数据库所做的更改是持久的,因为程序仅在数据库文件不存在时才创建它。要从新数据库开始,只需删除数据库文件即可。
数据库存储在单个文件中,不依赖于其他文件或任何内容。这使得可以轻松地将数据库复制到其他地方以在其他程序中使用。
本文仅涉及直接从 C# 源代码使用 SQL Server Everywhere,而不涉及任何 GUI 组件的使用。即使使用嵌入式 SQL Server,我们也希望使用我们习惯用于其他数据库的工具和组件。这应该是可能的,但留待另一篇文章讨论。
历史
- 2006 年 7 月 7 日 - 原始文章。