Cập nhật và truy vấn dữ liệu với đối tượng DataAdapter

Một phần của tài liệu Bài tập lập trình window form pot (Trang 104 - 125)

3.6.1. Chức năng

 Có chức năng như một chiếc cầu nối giữa nguồn (tệp) dữliệu và các bảng được cached trong bộ nhớ (đối tượng DataSet.). DataAdapter sửdụng phương thức Fill()đểnhận dữliệu từnguồn dữliệu vào một dataset.

3.6.2. Khai báo đối tượng DataAdapter

Khai báo: SqlDataAdapter BiếnAdapter;

 Sửdụng: BiếnAdapter.Fill(<Biến dataset>, “Tên cho bảng”); or BiếnAdapter.Fill(<Biến_DataTable>, “Tên cho bảng”);

3.6.3. Sửdụng đối tượng DataAdapter

3.6.3.1. Sửdụng đối tượng DataAdapter đểtruy vấn dữliệu

Chúng ta muốn lấy dữliệu bảng tbSinhVienở trên chúng ta có thểsửdụng đối tượng DataAdapter như bên dưới.

usingSystem.Data;

usingSystem.Data.SqlClient;

namespaceSampleDatabaseProgramming {

public partial classfrmADONET:Form

{

publicfrmADONET() {

InitializeComponent(); }

//Khai báo các chuỗi kết nối và các đối tượng SqlDataAdaptersqlAdap;

//Truy vấn dữliệu sửdụng đối tượng DataAdapter DataTableTruyVanDuLieu()

DataTabledt=newDataTable();

//

sqlAdap =newSqlDataAdapter("select * from tbSinhVien",@"Data Source=.\SQLEXPRESS;Initial Catalog=CSDL;Integrated Security=True");

sqlAdap.Fill(dt);

//

returndt; }

3.6.3.2. Sửdụng DataAdapter đểcập nhật (inserts, update…) dữliệu

usingSystem.Data;

usingSystem.Data.SqlClient;

namespaceSampleDatabaseProgramming {

public partial classfrmADONET:Form

{

//Khai báo đối tượng SqlDataAdaptersqlAdap;

//Cập nhật dữliệu với DataAdapter DataTableCapNhatDuLieu() {

DataTabledt=newDataTable();

//

sqlAdap =newSqlDataAdapter("Insert into tbSinhVien values('M02',N'Nguyễn Văn Quyết','TK2', '10/10/1988','Hưng Yên')",@"Data Source=.\SQLEXPRESS;Initial Catalog=CSDL;Integrated Security=True");

//

returndt; }

//Gọi phương thức cập nhật dữliệu

private voidfrmADONET_Load(objectsender,EventArgse) { CapNhatDuLieu(); } } } 3.7. Mô hình DataSet 3.7.1. Chức năng

 Dataset là một lớpdùng để thao tác với dữ liệu theo mô hình dữ liệu phi kết nối. Nó được coi như là một kho chứa các bảng (table). Người dùng có thể thay đổi dữ liệu trong các bảng này và khi thực sự muốn cập nhật vào Cơ sở dữ liệu thì DataSet sẽthực hiện cập nhật thông qua lớp DataAdapter

 Các bảng trong DataSet có thểdo DataAdapter Fill vào hoặc cũng có thểlà các bảng được tạo thành từlớp DataTable. 3.7.2. Khai báo

DataSet BienDataSet=new DataSet(); //Chú ý: Phải có New trước khi sửdụng biến DataSet 3.7.3. Mô hình DataSet

Mối quan hệgiữa DataAdapter và DataSet

Mô hình DataTabble

3.8. Đối tượng Parameter

3.8.1. Chức năng

 Sửdụng đối tượng SqlParameter đểtruyền giá trị (lấy từtextbox, có sẵn…) vào cho các tham số ứng với câu lệnh SQL hay

thửthục nội tại (StoredProcedure).

 Chú ý: Chỉ sửdụng đối tượng này nếu câu lệnh SQL hay StoredProcedure có tham số. 3.8.2. Sửdụng

Giảsửchúng ta có một StoredProcedure thêm mới một bản ghi vào bảng tbSinhVien có nội dung:

CREATE PROCEDURE ThemMoiBanGhi (

@MaSinhVien nchar(10), @TenSinhVien nvarchar(50), @Lop nchar(10),

@NgaySinh nchar(12), @QueQuan nvarchar(12) )

AS BEGIN

If exists (select MaSinhVien from tbSinhVien where MaSinhVien=@MaSinhVien) print 'Da co sinh vien nay'

else

begin

Insert into tbSinhVien values (@MaSinhVien, @TenSinhVien,@Lop,@NgaySinh,@QueQuan) print 'Da them thanh cong'

end END

GO

Chúng ta sửdụng đối tượng SqlParameternhư dưới:

usingSystem.Data;

usingSystem.Data.SqlClient;

namespaceSampleDatabaseProgramming {

public partial classfrmADONET:Form

{

publicfrmADONET() {

InitializeComponent(); }

//Khai báo các chuỗi kết nối và các đối tượng

SqlConnectionsqlCon;

SqlCommandsqlCom;

SqlParametersqlPa;

//Phương thức kết nối tới CSDL SQL Server private voidKetNoi()

{

sqlCon =newSqlConnection(strConnect);

if(sqlCon.State ==ConnectionState.Closed) {

sqlCon.Open(); }

}

//Phương thức đóng kết nối tới CSDL private voidNgatKetNoi()

{

if(sqlCon.State ==ConnectionState.Open) {

sqlCon.Close(); }

}

//Phương thức ThucThiởdạng tổng quát: cảcâu lệnh SQL và Stored Procedure //Thực thi nhiều lần và các Store hay câu lệnh SQL có tham số

//Khai báo đối tượng Parameter /// <summary>

///Phương thức thực thi câu lệnh SQL hay StoredProcedure /// </summary>

/// <param name="cmdType">Thực thi dạng câu lệnh SQL hay StoredProcedure</param> /// <param name="strName">Tên câu lệnh SQL hay tên StoredProcedure</param> /// <param name="MangTen">Tên các tham sốtruyền vào StoredProcedure</param>

/// <param name="MangGiaTri">Giá trịtruyền vào cho các biến trong StoredProcedure</param> /// <param name="MangType">Kiểu dữliệu của biến</param>

public voidThucThi(CommandTypecmdType,stringstrName,string[] MangTen,object[] MangGiaTri,DbType[] MangType) {

KetNoi();

//

sqlCom =newSqlCommand(); sqlCom.CommandType = cmdType; sqlCom.CommandText = strName; sqlCom.Connection = sqlCon;

//Khai báo và gán các đối tượng Parameter for(inti = 0; i < MangTen.Length; i++) {

sqlPa =newSqlParameter();

sqlPa.ParameterName = MangTen[i]; sqlPa.Value = MangGiaTri[i]; sqlPa.DbType = MangType[i]; sqlCom.Parameters.Add(sqlPa); } //Thực thi câu lệnh sqlCom.ExecuteNonQuery(); NgatKetNoi(); } //Gọi thực thi Stored

private voidfrmADONET_Load(objectsender,EventArgse) {

string[] MangTen = {"MaSinhVien","TenSinhVien","Lop","NgaySinh","QueQuan"};

string[] MangGT = {"M01","Nguyễn Văn A","TK6","10/10/1988","Hưng Yên"};

DbType[] MangType={DbType.String,DbType.String,DbType.String,DbType.String,DbType.String};

//ThucThi(CommandType.StoredProcedure, "ThemMoiBanGhi", MangTen, MangGT, MangType);

//End

}

}

3.9. Ràng buộc dữliệu với các điều khiển3.9.1. Mục đích 3.9.1. Mục đích

Gắn kết các điều khiển (Textbox…) vào các trường dữliệu trong CSDL

3.9.2. Sửdụng

Trong C#: đểgắn kết dữliệu với các điều khiển chúng ta thường sửdụng đối tượng BindingManagerBase (xem ví dụminh họa

đikèm)

3.10. Sửdụng DataView trong sắp xếp và tìm kiếm dữliệu3.11. LINQ 3.11. LINQ

CHƯƠNG 4: CRYSTAL REPORT

4.1. Thiết kếbáo cáo với Crystal Report

Bước 1: Tạo 1 Project Visual C#.NET bình thường

Bước 2: Để thiết kế Report bạn thêm vào dự án vừa tạo ở bước 1 một Item Report bằng cách:

Report được chia làm 5 khu vực (Section):

Section 1 (Report Header): Những thiết kế trên phần này chỉ

xuất hiện trên trang đầu tiên của báo cáo (Report) (nếu báo cáo có nhiều trang).

Section 2 (Page Header): Những thiết kếtrên phần này sẽ xuất hiện trên tất cảcác của báo cáo (nếu báo cáo có nhiều trang).  Section 3 (Detail): Khu vực này hiển thịnội dung bảng CSDL.  Section 4 (Report Footer) và Section 5(Page Footer) có ý nghĩa

tương tự như Section 1 và 2.

Chú ý: Tùy thuộc CSDL là gì (SQL Server, Access, Excel…) mà chúng ta chọn Driver cho thích hợp (trong trường hợp này tôi chọn kết nối đến SQL Server)

Chọn tên Server từ Combobox Server (ở đây tên server của tôi là: VIETHQTK1 hoặc bạn có thể gõ vào đó là localhost…). Sau đó bạn chọn CSDL mà muốn hiển thị ra Report ở Combobox Database (ở đây tôi chọn

CSDL Northwind)

Chọn các bảng dữ liệu cần hiển thị dữ liệu ra Report bên khung bên trái

sau đó nhấn nút >. Khi đó danh sách các bảng bạn chọn sẽ hiển thị ra bên tay phải bạn (ở đây tôi muốn hiển thịbảng CSDL Customers).

Bước 4: Thiết kếReport

Đế thiết kế reports Visual Studio cung cấp một số điều khiển (trong hộp thoại Toolbox), các điều khiển này cũng có các thuộc tính như trong các ứng dụng Window Form.Ở đây ta chú ý đến 2 điều khiển

- Text Object: Hiển thi chuỗi Text (như một Label)

- Line Object: Dùng kẻ các đường thẳng.

Trước hết chúng ta thiết kế cho 2 phần Section 1 (Report Header)

(thường hiển thịCỘNG HÒA XÃ HỘI CHỦNGHĨA……..)và Section 2 (Page Header) (thường hiển thị tiêu đề báo cáo). Ở đây: 2 phần này tôi dùng điều khiển Text Objectđểthiết kế.

Tiếp đến chúng ta thiết kế để dữ liệu từ CSDL hiển thị ra Report. Chúng

ta làm theo các bước sau:

Bạn kéo lần lượt các trường trong bảng CSDL Customers ở trong khung Field Explorer bên tay trái vào khu vực Section 3 (Details) ta sẽ được như hình

Để xem các kết quả thiết kế của bạn bạn có thể chọn Tab Main Report

→ Quá trình thiết kếReport hoàn tất bây giờ đến bước hiển thịReport ra Form

4.2. Nạp và hiển thị Report trong chương trình

Bước 5: Hiển thịReport ra form

Đểhiến thịReport nên Form, VS hỗtrợ điều khiển CystalReportViewr trong Tab Reporting.

Bạn hãy kéođiều khiển đó vào form sau đó đặt thuộc tính ReportSource

cho điều khiển đó là Reports chúng ta vừa thiết kế → Giờthì bạn hãy chạy form và xem kết quảxem nào!

4.3. Thiết kế Report động4.3.1. Mục đích 4.3.1. Mục đích

Truyền dữ liệu từ form (dữ liệu được nhập vào từ textbox, dữ liệu từ

biến…) sang report nhằm thiết kế các report động. 4.3.2. Sửdụng

Yêu cầu: Truyền dữ liệu từ textbox có tên txtTenSinhVien (txtTenSinhVien nằm trên form frmDynamicReport) sang một report có tên reDynamicReport.

Cách làm:

Bước 1: Thiết kế report có nội dung như sau (hoàn toàn tương tự như bước 4ởtrên).

Trên Report có một TextObject có tên txtTenSinhvien dùng để đón nhận kết quảtruyền từform sang.

Bước 2: Thiết kế form có giao diện như sau (frmDynamicReport).

frmDynamicReport được chia làm hai phần sửdụng SplitContainer.

 Phần thứ nhất (Panel 1) chứa một textbox có tên txtTenSinhVien để

truyền dữliệu sang TextObject (txtTenSinhVien) trên Report. Button

 Phần thứ 2 (Panel 2) chứa điều khiển crystalReportViewer1để hiển thịreport thiết kế ở bước 1.

Bước 3: Truyền dữliệu từTextbox sang Report

usingCrystalDecisions.CrystalReports; usingCrystalDecisions.CrystalReports.Engine;

usingCrystalDecisions.CrystalReports.Engine.Migration; namespaceCrystalReport2008

{

public partial classfrmDynamicReport:Form

{

private voidbtOK_Click(objectsender,EventArgse) {

crDynamicReportrpt =newcrDynamicReport();

//Truyền dữliệu ((TextObject)rpt.ReportDefinition.ReportObjects["txtTenSinhVien"]).Text = txtTenSinhVien.Text; //Refresh data crystalReportViewer1.ReportSource = rpt; crystalReportViewer1.RefreshReport(); } } }

Một phần của tài liệu Bài tập lập trình window form pot (Trang 104 - 125)

Tải bản đầy đủ (PDF)

(125 trang)