2015-10-08 57 views
0

我將我的軟件數據庫從MS Access更改爲SQL Server CE。我無法使用其他數據庫,因爲我沒有(Admin)權限來安裝客戶端。什麼是在SQL Server CE中查找數據的最快方法Winforms

我已根據需要索引了幾列。我很困惑在SQL Server CE中查找數據,因爲有幾種方法可以這樣做。我可以用SqlCeResultSet,SqlCeDataReader等方法來查找數據。

哪一個被使用,何時使用,因爲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; 

我是confu什麼時候使用哪一個。哪一個提供了在SQL Server CE中查找數據的最快方法?

+0

@PaulF是的,我已閱讀。這是關於SqlDataAdapter,我很困惑SqlCeResultSet和SqlCeDataReader。你能否提供這兩者之間的表現?當我們應該使用SqlCeResultSet? –

+1

'SqlCeDataReader'可以讓你處理數據「下載時」,而據我所知'SqlCeResultSet'在你訪問它們之前加載所有記錄。順便說一句,'SqlCeResultSet'繼承自'SqlCeDataReader',所以你總是使用'SqlCeDataReader':P –

+0

@ C.Evenhuis:謝謝 - 我只是想說 - 如果所有記錄都被讀取,那麼性能應該是類似。 – PaulF

回答

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

相關問題