2010-02-14 11 views
5

Tôi có một ứng dụng WPF đơn giản sử dụng ClickOnce để xử lý cài đặt. Trong ứng dụng này là một cơ sở dữ liệu nhỏ gọn. Thông qua thử nghiệm tôi đã thấy rằng khi tôi xuất bản một xây dựng mới cơ sở dữ liệu này sẽ bị ghi đè, đó không phải là những gì tôi muốn. Có anyway tôi có thể có kiểm soát hạt mịn hơn những tập tin được cập nhật? Tôi cho rằng ClickOnce chỉ đơn giản là kiểm tra hàm băm của tệp cơ sở dữ liệu, quyết định rằng nó đã thay đổi và kéo bản cập nhật.Trình cài đặt ClickOnce xử lý các cập nhật khi cơ sở dữ liệu nhỏ gọn được tham gia như thế nào?

Cách giải quyết khác là tôi đã xóa cơ sở dữ liệu khỏi các tệp được bao gồm trong ứng dụng đã xuất bản để bản gốc vẫn còn trên máy khách sau khi cập nhật, bị ảnh hưởng.

Không phải là một giải pháp tuyệt vời Tôi biết

Cảm ơn,

+0

điều gì sẽ thay đổi với cơ sở dữ liệu làm cho hàm băm thay đổi? Bạn có nghĩ rằng bạn sẽ * muốn * để đẩy ra một phiên bản mới của cơ sở dữ liệu trong tương lai? – codeConcussion

+0

có thực sự không nên bất cứ điều gì thay đổi như xa như tôi có thể nhìn thấy ngoài việc tạo ra/sửa đổi dấu thời gian có lẽ. Tôi có thể muốn cập nhật cơ sở dữ liệu tại một thời điểm nào đó nhưng tôi giả sử bây giờ Im trong tình huống mà cơ sở dữ liệu trong phiên bản mà Im xuất bản có băm khác với bản gốc, vì vậy clickonce muốn ghi đè mỗi lần, nghĩa là người dùng mất dữ liệu . – Sergio

Trả lời

5

triển khai ClickOnce tách riêng các tập tin ứng dụng vào "Bao gồm" hay "tập tin dữ liệu". Bạn có thể chỉ định từng tệp trong Visual Studio bằng cách đi tới trang Thuộc tính của dự án, tab Xuất bản, sau đó nhấp vào nút "Tệp ứng dụng ...". Sau đó, bạn có thể đặt tệp .sdf của mình thành "Tệp dữ liệu" trong cột Trạng thái xuất bản.

Tệp dữ liệu được tải xuống bằng ứng dụng ClickOnce sau đó được đặt trong một thư mục riêng biệt cho mỗi phiên bản mới. Ý tưởng là trong lần chạy đầu tiên của phiên bản ứng dụng mới, bạn sẽ truy xuất tất cả dữ liệu cá nhân của người dùng từ các tệp dữ liệu cũ của họ và kết hợp dữ liệu đó vào các tệp dữ liệu mới vừa được tải xuống cùng với tệp mới của bạn phiên bản.

Tôi nghĩ bạn sẽ tìm thấy thông tin bạn cần tại Accessing Local and Remote Data in ClickOnce Applications. Cụ thể, hãy xem các mục "Thư mục dữ liệu ClickOnce" và "Thư mục dữ liệu và Phiên bản ứng dụng".

Để truy cập vào cơ sở dữ liệu SQL Server CE nằm trong thư mục dữ liệu của bạn, sử dụng một chuỗi kết nối tương tự như sau:

<add 
    name="MyApplication.Properties.Settings.LocalCacheConnectionString" 
    connectionString="Data Source=|DataDirectory|\LocalCache.sdf" 
    providerName="Microsoft.SqlServerCe.Client.3.5" /> 

Các "| DataDirectory |" là một cú pháp đặc biệt được hỗ trợ bởi SQL CE và SQL Express và giải quyết khi chạy đến thư mục thích hợp.

+0

Làm thế nào để các tệp MDF phiên bản trước đó của tôi dường như có 'ngày sửa đổi' của phiên bản mới?Bạn có nghĩ rằng có khả năng là thư mục dữ liệu phiên bản trước đó đang được ghi đè bằng các tệp dữ liệu mới? –

2

Nếu bạn nhiều như , hãy mở cơ sở dữ liệu SQLCE trong dự án của bạn, nó sẽ thay đổi dấu thời gian trên cơ sở dữ liệu và ClickOnce sẽ triển khai và đặt phiên bản cũ trong thư mục con \ pre.

Bạn có thể muốn xem xét this method để xử lý việc này. Sau đó, nếu bạn vô tình triển khai một phiên bản mới của cơ sở dữ liệu và không nhận ra nó, bạn không bị hosed. Nếu bạn cố ý thay đổi, bạn có thể thay đổi cấu trúc cơ sở dữ liệu của cơ sở dữ liệu hiện tại bằng các truy vấn SQL và kéo dữ liệu từ bản sao mới được triển khai vào Thư mục Dữ liệu (mà bạn đang bỏ qua) khi cần.

RobinDotNet