8

Tôi có một Cơ sở dữ liệu SQL Compact Edition mà tôi cập nhật định kỳ (thông qua các dịch vụ web).Cập nhật/Chèn vào bảng bằng cách sử dụng SQLCeResultSet

Phần mà tôi viết vào cơ sở dữ liệu mất quá nhiều thời gian. Tôi hiện đang làm điều đó với LINQ to Datasets (như đã thấy trong this question). Tôi có heard rằng nếu tôi làm điều đó với với SQLCeResultSet rằng nó sẽ làm việc nhanh hơn.

Vì vậy, cho rằng tôi có một bảng như thế này:

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

Và tôi có nó trong đối tượng mà tôi nhận được từ các dịch vụ web của tôi trông như thế này:

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

Làm thế nào tôi lấy 100 đối tượng Client vào cơ sở dữ liệu?

Cập nhật hàng hiện tại và chèn hàng chưa có trong cơ sở dữ liệu (được xác định bằng khóa chính)?

Bất kỳ mã ví dụ nào đều tuyệt vời. Tôi có một số SqlCeConnection, nhưng không có gì khác.

Cảm ơn bạn đã trợ giúp!

Trả lời

13

Nó sẽ giống như thế này:

(Edited cho chèn hoặc cập nhật)

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

Tôi nhận thấy rằng không có cuộc gọi để cập nhật. Có chèn làm một bản cập nhật nếu hàng đã tồn tại? – Vaccano

+1

ResultSetOptions phải được đặt thành Có thể cập nhật. Sự hiểu biết của tôi là Update() chỉ áp dụng cho các bản ghi hiện có, không áp dụng cho các lần chèn. –

+0

Xin lỗi, điều này chỉ dành cho phụ trang. Bạn sẽ phải sửa đổi logic nếu bạn muốn thay thế. Tôi sẽ làm một Tìm kiếm trên lĩnh vực PK, sau đó làm một Đọc, nếu đọc trả về true, sau đó sửa đổi các bản ghi và cập nhật, nếu không tạo và chèn. – ctacke

Các vấn đề liên quan