« Home « Kết quả tìm kiếm

Quản Lý Dữ Liệu - Cơ Sở Dữ Liệu phần 9


Tóm tắt Xem thử

- Để thực hiện cập nhật ta gán InsertCommand, DeleteCommand và UpdateCommand cho đối tượng DataAdapter, sau đó gọi phương thức Update của nó.
- Thiết kế chức năng đọc/ ghi dữ liệu 1.
- Thiết kế chức năng ghi dữ liệu:.
- Ví dụ: nếu thực tế NSD nhập liệu cho một tập đối tượng cùng lúc, mỗi đối tượng có ít thuộc tính và xử lý đơn giản thì nên nhập liệu bằng lưới (grid).
- Nếu đối tượng có nhiều thuộc tính hoặc xử lý phức tạp thì có thể nhập riêng từng đối tượng, nhưng nên hiển thị song song một lưới chứa danh sách các đối tượng đã nhập để NSD có thể kiểm tra lại khi cần..
- Lựa chọn cách xử lý để giảm thiểu thời gian làm việc của NSD (tất nhiên vẫn phải đảm bảo tính an toàn và đúng đắn): thời điểm kiểm tra ràng buộc toàn vẹn (xem mục 2), ghi nhận dữ liệu một lần hay sau mỗi lần NSD nhập xong một đối tượng, thời điểm mở và đóng kết nối với CSDL,….
- Thiết kế giao diện sao cho có thể hạn chế lỗi của người sử dụng, ví dụ: sử dụng ComboBox, Check box,… để đảm bảo ràng buộc tham chiếu và ràng buộc miền giá trị rời rạc.
- Nếu để chương trình đẩy dữ liệu xuống CSDL, sau khi nhận báo lỗi từ CSDL mới phản hồi cho NSD thì sẽ mất nhiều thời gian..
- Các trường hợp thông thường có thể kiểm tra ràng buộc toàn vẹn ở tầng giao diện hoặc nghiệp vụ: ràng buộc đơn giản như miền giá trị, liên thuộc tính trên một quan hệ.
- ràng buộc phức tạp hơn (liên bộ, liên thuộc tính) nhưng các dữ liệu liên quan cần thiết để kiểm tra nó đã được chương trình đọc sẵn trước đó..
- Nếu việc kiểm tra ràng buộc cần các dữ liệu liên quan khác chưa được chương trình đọc sẵn trước đó, kiểm tra ở CSDL trong đa số trường hợp sẽ hiệu quả hơn là đọc các dữ liệu đó lên để kiểm tra ở tầng trên..
- Nếu các ràng buộc của ứng dụng có các tham số đặt trong bảng tham số ở CSDL hoặc trong tập tin, nên đọc các tham số này lên một lần và sử dụng lại cho các lần nhập liệu, thay vì phải đọc lại từ CSDL hay tập tin mỗi khi nhập một đối tượng liên quan..
- Nếu các đối tượng trong CSDL được quản lý bằng mã, chương trình nên có cơ chế tự động phát sinh các mã này, để tránh gây ra các vi phạm trên ràng buộc khóa chính (Trừ những trường hợp nghiệp vụ thực tế đòi hỏi mã cho NSD ghi)..
- Thiết kế chức năng đọc dữ liệu:.
- Có thể chia thành hai dạng chức năng đọc dữ liệu chính: đọc dữ liệu lên Form và đọc dữ liệu lên báo biểu (Report).
- Dữ liệu đọc lên Form có thể được thay đổi và cập nhật xuống CSDL, dữ liệu đọc lên báo biểu chỉ nhằm mục đích hiển thị thông tin..
- Khi đọc dữ liệu lên Form, ta sử dụng các đối tượng dữ liệu của ngôn ngữ lập trình (DataSet, DataTable, DataReader…) để lưu trữ tạm dữ liệu trong quá trình hiển thị.
- Ta có thể sao chép dữ liệu từ các đối tượng dữ liệu vào các đối tượng hiển thị như Textbox, DataGridView, Combobox,… trên form, hoặc kết buộc trực tiếp các đối tượng dữ liệu với đối tượng hiển thị.
- Với cách thứ hai, khi dữ liệu được cập nhật: khi người sử dụng thay đổi dữ liệu trên các đối tượng hiển thị, dữ liệu trong các đối tượng dữ liệu cũng sẽ thay.
- Khi đọc dữ liệu lên report, ngoại trừ những trường hợp phức tạp mà dữ liệu được lấy từ nhiều nguồn: từ CSDL, từ file, từ form khác.
- thông thường ta đưa dữ liệu trực tiếp lên report mà không thông qua các đối tượng dữ liệu để giảm bớt một khoản chi phí trung gian.
- Các môi trường thiết kế report (Crystal report.
- thường hỗ trợ riêng phương thức đọc dữ liệu, không phụ thuộc vào các cách thức đọc dữ liệu của môi trường lập trình, dù rằng trong một số trường hợp vẫn hỗ trợ tích hợp (như Crystal report for .NET, trong đó dataset của .NET được Crystal report xem như một nguồn dữ liệu.
- Tuy nhiên, cho dù đọc dữ liệu lên form hay lên report, người thiết kế vẫn phải chú ý đến những nguyên tắc cơ bản sau:.
- Hạn chế đọc dữ liệu nhiều lần từ CSDL: nếu có thể, đọc các dữ liệu cần thiết một lần thay vì đọc thành nhiều lần từ CSDL để giảm chi phí thiết lập kết nối với dữ liệu.
- Hơn nữa, ở phía CSDL, việc đọc 1 lần n dòng dữ liệu sẽ nhanh hơn đọc k lần, mỗi lần n/k dòng..
- Vậy ta nên đọc một lần tất cả các lớp trong trường từ CSDL vào một đối tượng dữ liệu (DataTable chẳng hạn), sau đó tùy yêu cầu mà hiển thị phần dữ liệu phù hợp, hay mỗi lần NSD chọn khối ta lại đọc lại từ CSDL? Câu trả lời cho tình huống này và những tình huống tương tự là: nếu tất cả dữ liệu không quá lớn (vài trăm dòng trở xuống), ta nên đọc tất cả lên ứng dụng một lần..
- Giảm thiểu lượng dữ liệu chuyển từ CSDL lên ứng dụng: đọc đúng dữ liệu cần thiết, không đọc thừa..
- Dữ liệu phải được hiển thị theo định dạng thân thiện với người sử dụng.
- Trong CSDL, để tối ưu hoá lưu trữ và truy xuất, dữ liệu có thể ở dạng mà người sử dụng không hiểu hoặc không cần (ví dụ những mã đối tượng được phát sinh thêm để phục vụ việc lưu trữ, định dạng ngày giờ.
- Người sử dụng không cần biết dữ liệu bên dưới được lưu trữ như thế nào, cấu trúc ra sao, họ chỉ cần thấy được những thông tin được hiển thị và sắp xếp theo cách quen thuộc và tiện lợi nhất cho nghiệp vụ của họ..
- Nếu xử lý có thể mất nhiều thời gian, nên có phản hồi để NSD biết rằng chương trình vẫn đang làm việc (progress bar, waiting message,…)..
- Dùng try…catch để bắt các ngoại lệ (exception) có thể xảy ra, nhất là khi thực hiện các thao tác đóng/mở kết nối và đọc/ghi trên CSDL và thông báo lỗi theo cách mà NSD có thể hiểu được..
- Tạo báo biểu với Crystal Report 1.
- Crystal Report là một phần mềm hỗ trợ lập báo biểu từ đơn giản đến phức tạp.
- Ngoài việc cung cấp môi trường để thiết kế báo biểu, Crystal Report 9 phiên bản Developer và Advanced có hỗ trợ Report Creation API, cho phép người lập trình ứng dụng có thể tạo lập/ thay đổi cấu trúc/ nội dung report lúc runtime..
- Phiên bản Crystal Report tích hợp với .NET có hỗ trợ Run Time Object Model, cho phép thực hiện một số thay đổi trên report khi chương trình thực hiện (truyền tham số, thay đổi các thông số để đăng nhập database, thay đổi kích thước và vị trí các đối tượng), ta cũng có thể gán các đối tượng dữ liệu của .NET (ví dụ DataTable) làm data source cho report.
- Ta có thể thiết kế một report bằng Crytal Report 9, sau đó đưa vào ứng dụng .NET..
- Một báo biểu (report) gồm có những phần chính như sau.
- Report header: phần thông tin đầu tiên của báo biểu.
- Một báo biểu thường sẽ gồm nhiều trang, report header là phần xuất hiện chỉ một lần ở trang đầu tiên của toàn báo biểu.
- Page header: phần hiển thị thông tin xuất hiện ở đầu mỗi trang của báo biểu.
- Details: phần hiển thị thông tin chi tiết của báo biểu.
- Một báo biểu thường bao gồm nhiều mục với vai trò như nhau tương ứng với các mẩu tin (record) của database mà báo biểu sử dụng.
- Báo biểu footer: phần hiển thị thông tin xuất hiện chỉ một lần ở cuối báo biểu..
- Ví dụ: các thông tin như tổng số (grand total), người lập báo cáo là ai, tại đâu, vào ngày nào, sẽ được đặt ở báo biểu footer..
- Các loại đối tượng trong report.
- Các đối tượng trong báo biểu được quản lý qua cửa sổ Field explorer (View → Field Explorer).
- Các đối tượng này có thể được chọn để đưa vào hiển thị trong báo biểu..
- Database fields: Các trường thuộc dạng CSDL (có thể là table, stored procedure, SQL command.
- Thông thường các trường trong mục này sẽ được hiển thị trong phần detail của báo biểu..
- Ta có thể tạo mới một đối tượng formula bằng cách sử dụng Formula Editor hoặc Formula Expert.
- Formula Field : Là các trường mà dữ liệu có được nhờ tính toán trên các trường khác..
- Ví dụ: Khi làm một report báo cáo hóa đơn bán hàng, giả sử CSDL chỉ lưu trữ giá và số lượng của mặt hàng mua trong hóa đơn mà không lưu trữ thành tiền, khi đó ta có thể tạo một Formula field “Thành tiền” được tính bằng công thức:.
- Khi đó ta có thể tạo report với cột thành tiền (mặc dù không được lưu trong database)..
- Selection formula có thể được xây dựng trong cửa.
- SQL Expression field: SQL Expression cũng là trường mà dữ liệu của nó được tính toán từ những trường khác (ví dụ count, sum,… hay một công thức tính toán bất kỳ).
- Tuy nhiên, khác với Formula field, SQL Exppression được gửi về xử lý ở CSDL (và do đó phải được viết bằng cú pháp SQL), kết quả được đưa trả về báo biểu qua SQL Expression field..
- Đây có thể là một tham số ta tự khai báo, hoặc Crystal Report sẽ tự động thêm vào khi ta đưa một thủ tục thường trú có tham số vào trong database field.
- Lưu ý, khi chạy báo biểu trong Crystal, những trường tham số sẽ được hỏi giá trị, ta cần nhập vào ngay trong Crystal để hiển thị tạm thời..
- Group Name Field : Các thuộc dùng để gom nhóm dữ liệu trong report..
- Ví dụ : Ta muốn hiển thị danh sách học sinh theo từng lớp, khi đó thuộc tính Lớp sẽ là một đối tượng trong Group Name Field (Thêm một nhóm bằng cách chọn Insert Group hoặc chọn Group Expert từ menu database)..
- Ngoài ra, ta có thể đưa vào report những kiểu đối tượng khác như text(label), hình ảnh, đường kẻ, biểu đồ,….
- Đáp ứng mục tiêu nghiệp vụ, phù hợp với người sử dụng (thông tin kết xuất phải là thông tin mà người sử dụng có thể hiểu được, khớp với nghiệp vụ thực tế)..
- Số lượng vừa đủ, sắp xếp, gom nhóm hợp lý, tránh làm NSD bị rối mắt vì báo biểu dày đặc dữ liệu..
- Trình bày dữ liệu đúng vị trí..
- Trình bày dữ liệu đúng lúc cần (ví dụ hiển thị lại tên các cột dữ liệu khi sang trang mới)..
- Nếu dữ liệu được hiển thị trong báo biểu sẽ thay đổi trong các lần báo biểu được hiển thị, bỏ lựa chọn Save Data with Report (File → Report Options).
- Khi sử dụng Formula, các tính toán, chọn dòng/nhóm sẽ được thực hiện bởi Crystal Report sau khi đã đọc toàn bộ dữ liệu liên quan từ CSDL lên.
- Điều này có thể làm nặng đường truyền và tăng chi phí đọc ghi nếu dữ liệu liên quan lớn..
- Ngoài ra, một hệ quản trị CSDL luôn có cơ chế điều chỉnh để cải thiện tốc độ xử lý trong trường hợp dữ liệu lớn, vì vậy, việc thực hiện xử lý chọn trên dòng/nhóm hay các tính toán mà dữ liệu kết quả nhỏ hơn dữ liệu trung gian (count/sum, max.
- Do đó, ta nên chuyển các công thức thành SQL Command/Expression hay thủ tục thường trú bất cứ khi nào có thể..
- Ta có thể xem trước report bằng cách nhấn F5 (Refresh Report Data) và chuyển qua tab preview..
- Hiển thị report trong một ứng dụng .NET 3.1.
- Crystal Report Viewer.
- Để hiển thị Crystal report trên .NET Windows form, ta sử dụng control CrystalReportViewer (có thể kéo thả control này từ toolbox vào form)..
- Kết buộc báo biểu vào Report Viewer.
- Giả sử ta đã sử dụng một control CrystalReportViewer tên là rptViewer.
- Ta có thể sử dụng một trong những cách sau để đưa một Crystal report vào ứng dụng và kết buộc vào viewer để hiển thị.
- Kết buộc dạng “Untyped report”: Giả sử ta có sẵn một report tên MyReport rên đĩa C..
- Kết buộc bằng tên: Gán tên và đường dẫn đến báo biểu cho thuộc tính ReportSource của rptviewer..
- Khai báo đối tượng thuộc lớp ReportDocument, tải báo biểu vào đối tượng này và kết buộc vào rptViewer.
- Nếu tạo báo biểu ngay trong .NET : Project → Add New Item..
- Với cách này, trong project sẽ xuất hiện một lớp đối tượng mới tương ứng với báo biểu mới thêm vào (lớp đối tượng này kế thừa từ lớp ReportClass, và ReportClass kế thừa ReportDocument).
- Một đối tượng thuộc lớp này, ngoài các thuộc tính và phương thức kế thừa từ lớp ReportDocument, còn có một số thuộc tính thể hiện các thông tin riêng của từng report: các session, tham số,… Tuy nhiên các thuộc tính này phần lớn là read only.
- Để thay đổi một số thông tin trên báo biểu (ví dụ truyền tham số), ta vẫn chủ yếu sử dụng các phương thức và thuộc tính của lớp ReportDocument..
- Thay đổi thông tin kết nối đến nguồn dữ liệu:.
- for (int i=0;i<report.Database.Tables.Count;i.
- Info = report.Database.Tables[i].LogOnInfo;.
- report.Database.Tables[i].ApplyLogOnInfo(Info);.
- string location = report.Database.Tables[i].Location;.
- report.Database.Tables[i].Location = location;//report sẽ tự điền vào database và owner mới.
- Nếu kết nối sử dụng Windows Authentication (Integrated Security), ta để trống UserID..
- Trong đoạn lệnh trên, nên đặt lệnh report.Database.Tables[i].Location = location;.
- trong try…catch để bắt Exception có thể xảy ra nếu các thông tin kết nối được gán không hợp lệ:.
- report.Database.Tables[i].Location = location;.
- report.DataDefinition.ParameterFields["@MaNganh"].ApplyCurrentValues(values);.
- phải được thực hiện sau cùng, sau khi đã cấu hình cho đối tượng report (thay đổi thông số kết nối data source, truyền giá trị tham số.
- Nhập các bộ dữ liệu sau : MaCT tenChuongTrinh varchar(10) nvarchar(100).
- THT01 Toán Cao cấp A1 CNTT VLT01 Toán cao cấp A1 VL THT02 Toán rời rạc CNTT THCS01 Cấu trúc dữ liệu 1 CNTT THCS02 Hệ điều hành CNTT KetQua

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt