8

我有一個SQL Compact Edition數據庫,我定期更新(通過Web服務)。使用SQLCeResultSet更新/插入表格

我寫入數據庫的部分太長了。我目前正在使用Linq來處理數據集(如this question所示)。我有heard,如果我使用SQLCeResultSet執行它,它將工作得更快。

所以,因爲我有這樣的一個表:

 
tblClient 
    +- CLIENT_ID  {Unique identifier} (Primary Key) 
    +- CLIENT_NAME {varchar (100)} 
    +- CLIENT_ACTIVE {bit}

而且我已經在對象,我從我的Web服務得到看起來像這樣的:

class Client 
{ 
    public Guid ClientID { get; set; } 
    public String ClientName { get; set; } 
    public bool Active { get; set; } 
} 

我怎麼會獲得100個客戶端對象到數據庫中?

更新現有行和插入行已經不在數據庫(由主鍵確定的)?

任何示例代碼都會很好。我有一個SqlCeConnection,但沒有別的。

感謝您的幫助!

回答

13

這將是這個樣子:

編輯的插入或更新

void Foo(SqlCeConnection connection) 
{ 
    using (var cmd = new SqlCeCommand()) 
    { 
     cmd.CommandType = CommandType.TableDirect; 
     cmd.CommandText = "MyTableName"; 
     cmd.Connection = connection; 
     cmd.IndexName = "PrimakryKeyIndexName"; 

     using (var result = cmd.ExecuteResultSet(
          ResultSetOptions.Scrollable | ResultSetOptions.Updatable)) 
     { 
      int pkValue = 100; // set this, obviously 

      if (result.Seek(DbSeekOptions.FirstEqual, pkValue)) 
      { 
       // row exists, need to update 
       result.Read(); 

       // set values 
       result.SetInt32(0, 1); 
       // etc. 

       result.Update(); 
      } 
      else 
      { 
       // row doesn't exist, insert 
       var record = result.CreateRecord(); 

       // set values 
       record.SetInt32(0, 1); 
       // etc. 

       result.Insert(record); 
      } 
     } 
    } 
} 
+0

我注意到,沒有調用Update。如果該行已經存在,Insert會執行更新嗎? – Vaccano 2010-07-01 22:49:02

+1

ResultSetOptions應設置爲可更新。我的理解是Update()只適用於現有記錄,而不適用於插入。 – 2010-07-02 03:09:05

+0

對不起,這是隻爲插入。如果你想做替換,你將不得不修改邏輯。我會在PK字段上執行Seek,然後執行Read,如果讀取返回true,然後修改記錄並更新,否則創建並插入。 – ctacke 2010-07-02 13:40:57