8

Tengo una base de datos SQL Compact Edition que actualizo periódicamente (a través de servicios web).Actualizar/Insertar en una tabla usando SQLCeResultSet

La parte donde escribo en la base de datos lleva demasiado tiempo. Actualmente lo estoy haciendo con Linq to Datasets (como se ve en this question). Tengo heard que si lo hago con SQLCeResultSet, funcionará más rápido.

Por lo tanto, dado que tengo una tabla como la siguiente:

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

y lo tengo en el objeto que recibo de mis servicios web que tener este aspecto:

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

¿Cómo me obtener 100 objetos de cliente en la base de datos?

Actualización filas existentes y la inserción de filas que no se encuentren en la base de datos (determinado por la clave principal)?

Cualquier código de ejemplo sería genial. Tengo un SqlCeConnection, pero nada más.

¡Gracias por cualquier ayuda!

Respuesta

13

que va a ser algo como esto:

(Editado para insertar o actualizar)

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

Me he dado cuenta de que no hay ninguna llamada a Update. ¿Insertar hace una actualización si la fila ya existe? – Vaccano

+1

ResultSetOptions se debe establecer en Actualizable. Según entiendo, Update() solo se aplica a los registros existentes, no a los insertos. –

+0

Disculpa, esto fue solo para inserciones. Tendrá que modificar la lógica si quiere hacer reemplazos. Me gustaría hacer una búsqueda en el campo PK, luego hacer una lectura, si la lectura devuelve verdadero, luego modificar el registro y actualizar, de lo contrario, crear e insertar. – ctacke

Cuestiones relacionadas