8

Ho un database SQL Compact Edition che aggiorno periodicamente (tramite servizi Web).Aggiorna/Inserisci in una tabella utilizzando SQLCeResultSet

La parte in cui scrivo nel database sta impiegando troppo tempo. Attualmente lo faccio con Linq to Datasets (come visto in this question). Ho heard che se lo faccio con SQLCeResultSet che funzionerà più velocemente.

Quindi, visto che ho una tabella come questa:

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

e ce l'ho in oggetto che ricevo dai miei servizi web che assomigliano a questo:

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

Come potrei ottenere 100 oggetti client nel database?

Aggiornamento righe esistenti e inserendo righe non già nel database (determinata dalla chiave primaria)?

Qualsiasi codice di esempio sarebbe ottimo. Ho un SqlCeConnection, ma nient'altro.

Grazie per qualsiasi aiuto!

risposta

13

è andare a cercare qualcosa di simile:

(Edited per inserire o aggiornare)

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

mi accorgo che non c'è nessuna chiamata a Update. Insert fa un aggiornamento se la riga esiste già? – Vaccano

+1

ResultSetOptions deve essere impostato su Updatable. La mia comprensione è Update() si applica solo ai record esistenti, non agli inserti. –

+0

Siamo spiacenti, questo era solo per inserti. Dovrai modificare la logica se vuoi fare sostituzioni. Farei una ricerca sul campo PK, quindi fare una lettura, se la lettura restituisce true, quindi modificare il record e aggiornare, altrimenti creare e inserire. – ctacke

Problemi correlati