在SQL Server CE Winforms中查找数据的最快方法是什么?

本文关键字:方法 是什么 数据 查找 Server SQL CE Winforms | 更新日期: 2023-09-27 18:16:48

我把我的软件数据库从MS Access改为SQL Server CE。我不能使用其他数据库,因为我没有(Admin)权限在客户端安装。

我已经根据需要索引了几列。我很困惑在SQL Server CE中找到数据,因为有几种方法可以这样做。我可以使用SqlCeResultSet, SqlCeDataReader等方法来查找数据。

由于SqlCeResultSet提供了几个ResultSetOptions,所以使用哪一个以及何时使用。我有ID是表Users中的主键,通常使用3种类型的查询:

使用where条件选择多个列:

SELECT Id, email, mobile
FROM Users
WHERE Users.Tmpid = 3
  AND connected = 1;

Select几个Fields with primary key:

SELECT email, mobile, address
FROM Users
WHERE Id = 10;

No where condition:

SELECT Max(TmpId)
FROM Users;

我搞不清哪个是在什么时候用的。哪一个提供最快的方式来查找数据在SQL Server CE?

在SQL Server CE Winforms中查找数据的最快方法是什么?

您应该先使用索引,然后使用TableDirect API,如下面的示例代码所示,在我的非正式测量中,它大约快了30%。

public CacheElement FindElementByKey(Guid key)
{
  using (var command = _connection.CreateCommand())
  {
    command.CommandType = CommandType.TableDirect;
    command.CommandText = "CacheElement";
    command.IndexName = "PK_CacheElement";
    using (var reader = command.ExecuteReader())
    {
        reader.Seek(DbSeekOptions.FirstEqual, key);
        if (reader.Read())
        {
            var element = new CacheElement();
            element.Key = key;
            element.Tag = reader.GetValue(1) == DBNull.Value ? null : reader.GetString(1);
            element.Value = (byte[])reader.GetValue(2);
            element.CreatedAt = reader.GetDateTime(3);
            element.ExpirationAt = reader.GetDateTime(4);
            return element;
        }
    }
    return null;
  }
}

查看我的博客文章的示例和更多信息:http://erikej.blogspot.dk/2015/07/sql-server-compact-adonet-data-access.html