2010-03-11 20 views
5

Tôi nghe thấy tốt hơn là nên mở một kết nối khi ứng dụng khởi động và đóng khi ứng dụng tắt.Windows Mobile Compact Framework SqlCeConnection

Loại sự cố nào có thể xảy ra khi có nhiều kết nối?

Bất kỳ bài viết nào ở đó là thực tiễn tốt nhất để có một kết nối?

Trải nghiệm của bạn với sql ce là gì?

Trả lời

2

Trong ứng dụng SQL CE 3.5/Compact Framework 3.5 của chúng tôi, chúng tôi mở một kết nối lúc khởi động và tiếp tục mở cho đến khi ứng dụng được đóng lại. Cơ sở dữ liệu được yêu cầu trên hầu hết mọi tương tác người dùng trong ứng dụng và giữ kết nối mở nhanh hơn mở và đóng kết nối theo yêu cầu.

Tất cả các cập nhật dữ liệu được thực hiện trong giao dịch. Chúng tôi Commit các giao dịch sử dụng tùy chọn CommitMode.Immediate. Điều này đảm bảo rằng các thay đổi dữ liệu được xả ngay lập tức vào tệp, giảm thiểu khả năng mất dữ liệu.

2

Nó thực sự phụ thuộc. Để thực hiện, SQL CE hoạt động tốt nhất nếu luôn có kết nối trực tiếp tới cơ sở dữ liệu, vì động cơ không phải xây dựng mọi thứ mỗi khi bạn kết nối.

Có một kết nối duy nhất, tuy nhiên, dẫn đến dữ liệu flushiong lười biếng cho tệp và khả năng mất dữ liệu hoặc tham nhũng cao hơn trong trường hợp xảy ra lỗi thảm khốc.

Tôi có xu hướng mở kết nối "giả" với cơ sở dữ liệu khi khởi động ứng dụng và có kết nối đó luôn mở nhưng hiếm khi hoặc không bao giờ thực sự được sử dụng. Điều này giữ cho động cơ "mồi" nếu bạn muốn. Để truy cập dữ liệu thực tế, tôi sử dụng kết nối riêng và quản lý trạng thái dựa trên hoạt động tôi đang làm, thường để nó mở trên nhiều truy vấn (một giao dịch giả nếu bạn muốn), nhưng không để nó mở vô thời hạn.

+0

Bạn có thể thay đổi hành vi xả nước lười biếng theo hai cách. Khi bạn gọi 'Commit' trên' SqlCeTransaction', bạn có thể 'CommitMode.Immediate' để xóa giao dịch ngay lập tức (http://msdn.microsoft.com/en-US/library/esdw1h9d.aspx). Ngoài ra còn có một tùy chọn 'flush interval' trên chuỗi kết nối (http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection.connectionstring.aspx). –

+0

Ý của bạn là gì? – pdiddy

+1

Tôi đang tìm kiếm bất kỳ tài liệu công khai nào về điều này, nhưng tất cả những gì tôi có thể tìm thấy là một email riêng tư từ một nhà phát triển trên nhóm SQL CE. Về cơ bản, kết nối đầu tiên với cơ sở dữ liệu khởi tạo một số đối tượng trong nội bộ và mọi kết nối khác đều sử dụng chúng. Tạo và giữ một kết nối xây dựng các đối tượng đó để sử dụng bởi tất cả các kết nối tiếp theo (do đó cải thiện hiệu năng). – ctacke