什么是在SQL Server CE Winforms

时间:2015-10-08 11:33:03

标签: c# .net sql-server winforms sql-server-ce

我将软件数据库从MS Access更改为SQL Server CE。我无法使用其他数据库,因为我没有客户端的(管理员)权限来安装。

我根据需要索引了几列。我很困惑在SQL Server CE中查找数据,因为有几种方法可以做到这一点。我可以使用SqlCeResultSetSqlCeDataReader和其他方法来查找数据。

使用了哪一个以及当它被使用时,因为SqlCeResultSet提供了多个ResultSetOptions。我有ID是表Users中的主键,通常使用3种类型的查询:

选择具有以下条件的几列:

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

使用主键选择多个字段:

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

没有条件:

SELECT Max(TmpId)
FROM Users;

我很困惑哪一个用的时候。哪一个提供了在SQL Server CE中查找数据的最快方法?

1 个答案:

答案 0 :(得分:1)

你应该使用索引,然后使用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