2010-01-12 28 views
7

Tôi có một DataTable dân cư tôi muốn serialize vào một tập tin để sử dụng sau này. Tôi đã xem xét các tùy chọn liên quan đến điều này và tự hỏi liệu có ai đó có thể chỉ cho tôi đúng hướng không.serializing một datatable để tái sử dụng sau này

Điều tôi sẽ tạo là hai phương pháp-- một để viết dữ liệu vào một tệp và một phương pháp khác để tạo dữ liệu mới bằng cách sử dụng tệp làm đầu vào. Liệu nó có ý nghĩa khi sử dụng các phương thức WriteXML() và Load() để làm điều này không, và nếu có, thì cờ nào là những tiêu điểm để tập trung vào? Cảm ơn bạn đã hướng dẫn.

Tôi đang sử dụng .Net 2.0 nếu có ích.

Trả lời

10

Tôi sẽ đọc các phương pháp đọc/ghi xml. Chúng tôi sử dụng khá rộng rãi. Thật nhanh chóng, thật dễ dàng, nó được xây dựng trong khung công tác.

+10

Tôi nghĩ rằng câu trả lời này sẽ tốt hơn rất nhiều nếu bạn đã bao gồm một mẫu mã. Bạn có thể biết cách sử dụng các phương thức đọc/ghi XML, và do đó có thể là tác giả của câu hỏi, nhưng hãy nhớ rằng trang web này không chỉ là nhận câu trả lời cho các câu hỏi của chúng ta. Đó là về việc ghi lại chúng cho những người khác gặp phải vấn đề. Những người dùng khác đến câu hỏi này có thể không biết cách sử dụng các phương pháp. –

1

Bạn có thể sử dụng kỹ thuật cơ bản để tuần tự hóa cơ sở dữ liệu của mình thành tệp CSV có tiêu đề. Một số hệ thống quản lý cơ sở dữ liệu hỗ trợ tải dữ liệu dễ dàng từ các tệp như vậy. Và trong trường hợp dbms của bạn không phải là không quá khó để viết một số mã mà sẽ làm điều này cho bạn. Câu trả lời đó có đáp ứng được câu hỏi của bạn không?

Theo tôi, nhược điểm của xml là nó chứa nhiều siêu dữ liệu hơn so với dữ liệu thực tế. Trong trường hợp siêu tệp csv không lặp lại.

0

Dữ liệu có phải là đối tượng trong bộ nhớ không? Nếu vậy, bạn có thể chỉ cần đi với Serialize và Deserialize phương pháp. Chúng tương đối nhanh và bạn có thể duy trì kết quả ở bất cứ đâu bạn muốn.

+0

Phương thức 'Serialize' và' Deserialize' nào bạn đang đề cập đến? –

+0

Bạn có thể sử dụng các phương thức trong lớp System.Xml.Serialization.XmlSerializer. Bây giờ tôi đang ở khách hàng, nhưng khi tôi có thời gian, tôi sẽ cố gắng lấy những ví dụ mà tôi có. Chúng khá đơn giản để sử dụng. –

+0

Xin chào, Vâng, DataTable có trong bộ nhớ. Tôi muốn được nhìn thấy bạn đoạn mã, như ngay bây giờ tôi đang sử dụng ReadXml() và WriteXml(). Cảm ơn! – larryq

13

Tôi nghĩ Silveira comment có nghĩa là sử dụng tuần tự nhị phân. Và quyền của nó là nó rất nhanh so với XML mà serialization là rất chậm so sánh với nhị phân đặc biệt cho số lượng lớn dữ liệu. Ngoài ra, phải mất rất nhiều không gian trên đĩa so với XML.

public static void Serialize(DataSet ds, Stream stream) { 
     BinaryFormatter serializer = new BinaryFormatter(); 
     serializer.Serialize(stream, ds); 
    } 

    public static DataSet Deserialize(Stream stream) { 
     BinaryFormatter serializer = new BinaryFormatter(); 
     return (DataSet)serializer.Deserialize(stream); 
    } 
+0

Một trong những thiếu sót trong việc sử dụng serialization nhị phân là việc serialization nhị phân có chứa tên hội đủ điều kiện của loại được serialized vì vậy nếu thay đổi System.Data.dll bạn sẽ không thể đọc dữ liệu từ tập tin nhị phân. Nhưng kể từ khi DataSet và các lớp khác trong không gian tên là một phần của khuôn khổ và không muốn thay đổi do đó tôi donot thấy bất kỳ vấn đề trong trường hợp này. – affan

+0

Tôi thường chỉ có để tuần tự hóa một lượng nhỏ dữ liệu, vì vậy XMLSerializer vẫn ổn. Nhưng điểm mấu chốt ở đây là tất cả chúng ta đều đồng ý rằng Serialization là một con đường tốt. Trình định dạng phù hợp (XML, Binary, DataContract), có thể được chọn tùy thuộc vào các yêu cầu khác (ví dụ: nếu bạn chỉ đọc dữ liệu trong ứng dụng của mình và không cần xuất dữ liệu sang môi trường khác, Nhị phân có vẻ là lựa chọn hoàn hảo) . –

+0

Cảm ơn bạn đã tip, Affan – larryq

7

POINT QUAN TRỌNG:
Nếu bạn cố gắng để serialize một đối tượng DataTable hoặc một đối tượng DataSet sử dụng Binary formatter, bạn vẫn sẽ nhận được một tập tin nhị phân, nhưng đó là một cái khá lớn bởi vì nó được làm đầy với một tấn dữ liệu XML. Thật không may, dữ liệu XML trong các tệp nhị phân làm cho các tệp lớn thiếu tính linh hoạt và khả năng đọc mà XML cung cấp. Sau đó, deserializing các tập tin như vậy có thể mất vài giây để hoàn thành và kết thúc chiếm bộ nhớ nhiều hơn thực sự cần thiết. Kết quả là, nếu bạn chọn một serialization nhị phân của các đối tượng ADO.NET bởi vì bạn cần để có được một đầu ra nhỏ gọn hơn, bạn sẽ thất bại. Sự tuần tự hóa nhị phân vẫn là cách tiếp cận hiệu quả nhất về mặt không gian, nhưng với các đối tượng ADO.NET nó không chứng tỏ là hiệu quả như nó cần.

Đối Complete tham khảo đọc bài viết sau: -
http://msdn.microsoft.com/en-us/magazine/cc188907.aspx

+0

Trong khi đó là một nhận xét tốt đẹp, nó không thực sự trả lời cho câu hỏi, + liên kết đã chết. – Szybki

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