Tải bản đầy đủ (.pdf) (10 trang)

Các giải pháp lập trình CSharp- P55 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.62 MB, 10 trang )

431
Chương 10: Cơ sở dữ liệu
Hình 10.25
Gõ tiêu đề Category - Product Report
11. Nhắp Finish. File CrystalReport1.rpt (xem hình 10.26) sẽ được thêm vào dự án.
Hình 10.26
Bản báo cáo đã được thiết kế
432
Chương 10: Cơ sở dữ liệu
Chúng ta đã xây dựng xong bản báo cáo. Bước thứ hai là thiết lập một cơ chế để xem bản báo
cáo này. Bước này khá dễ dàng. Bạn hãy kéo điều kiểm
CrystalReportViewer
từ hộp công cụ
vào form mặc định.
Nhắp phải vào
CrystalReportViewer
, và chọn Properties. Tìm thuộc tính
Dock
và chọn
Fill
(xem hình 10.27). Tùy chọn này sẽ khiến
CrystalReportViewer
lấp đầy vùng client của form.
Kế tiếp, tìm thuộc tính
ReportSource
, và nhắp Browse. Chọn file CrystalReport1.rpt mà
chúng ta vừa xây dựng. Bây giờ, bạn hãy chạy chương trình để xem kết quả (xem hình 10.29).
Hình 10.27
Tìm thuộc tính Dock và chọn Fill
433
Chương 10: Cơ sở dữ liệu


Hình 10.28
Form báo cáo hoàn chỉnh
Hình 10.29
Trình bày báo cáo với Crystal Report
Như bạn có thể thấy, điều kiểm
CrystalReportViewer
khá tinh vi. Bạn có thể sử dụng các
chức năng có sẵn để phân trang và in báo cáo. Bạn có thể nhắp nút Export Report (hình phong
bì với mũi tên đỏ) để xuất báo cáo thành một file Adobe Acrobat (.pdf), Microsoft Excel (.xls),
Microsoft Word (.doc), hay Rich Text Document (.rtf). Bạn cũng có thể phóng to bản báo cáo
hoặc tìm kiếm text bên trong bản báo cáo.
Trình thuật sĩ này này mạnh đến nỗi bạn không phải viết dòng mã nào cả. Một file mã nguồn
báo cáo, chứa một lớp báo cáo cho bản báo cáo này, tự động được sinh ra. Lớp báo cáo này có
lớp cơ sở là
ReportClass
.
434
Chương 10: Cơ sở dữ liệu
11
435
Chương 11:LẬP TRÌNH MẠNG
436
437
Chương 11: Lập trình mạng
icrosoft .NET Framework bao gồm một tập các lớp dùng để lập trình mạng thuộc
hai không gian tên:
System.Net

System.Net.Sockets
. Các lớp này hỗ trợ mọi

thứ, từ lập trình dựa-trên-socket với TCP/IP cho đến download file và trang
HTML từ web thông qua HTTP. Hai không gian tên này cũng là nền tảng cho hai nền
networking cấp cao hơn—Remoting và dịch vụ Web XML. Hai nền này sẽ được đề cập chi tiết
trong chương 12. Chương này sẽ trình bày các vấn đề sau:
M

Lấy tài nguyên từ web thông qua HTTP (mục 11.1, 11.2, và 11.3).

Hiển thị một trang web trong một ứng dụng dựa-trên-Windows bằng điều kiểm Web
Browser (mục 11.4).

Lấy địa chỉ IP và thông tin DNS về máy tính hiện hành và các miền khác trên World
Wide Web (mục 11.5 và 11.6).

Gửi thông điệp “ping” (mục 11.7) và giao tiếp bằng giao thức TCP và UDP (mục 11.8
đến 11.13).

Gửi và nhận e-mail (mục 11.14 và 11.15).
1.
1.
Download file thông qua HTTP
Download file thông qua HTTP


Bạn cần một cách thật nhanh và đơn giản để download một file từ một website
thông qua
HTTP
.



Sử dụng phương thức tĩnh
DownloadFile
của lớp
System.Net.WebClient
.
.NET Framework cung cấp vài cơ chế dùng để gửi dữ liệu thông qua HTTP. Một trong những
cách dễ nhất là sử dụng lớp
System.Net.WebClient
. Nó cung cấp những phương thức mức-cao
như
DownloadFile

UploadFile
. Các phương thức này không có sự hỗ trợ nội tại nào cho
giao tiếp bất đồng bộ, hay xác thực. Nếu cần các tính năng này, bạn có thể sử dụng các chức
năng phức tạp hơn do lớp
WebRequest

WebResponse
cung cấp (sẽ được mô tả trong mục
11.2 và 11.3).
Chương trình ví dụ dưới đây sẽ download file winXP.gif từ
localhost
và lưu vào đĩa.
using System;
using System.Net;
using System.IO;
public class Download {
private static void Main() {
string remoteUri =

"http://localhost/winXP.gif";
string localFileName = "winXP.gif";
WebClient client = new WebClient();
438
Chương 11: Lập trình mạng
Console.WriteLine("Downloading file " +
remoteUri + " to " + Path.GetFullPath(localFileName));
// Thực hiện download.
client.DownloadFile(remoteUri, localFileName);
Console.WriteLine("Download complete.");
Console.ReadLine();
}
}
2.
2.
Download và x lý file b ng streamử ằ
Download và x lý file b ng streamử ằ


Bạn cần lấy một file từ một website, nhưng không muốn lưu trực tiếp vào đĩa.
Thay vào đó, bạn muốn xử lý ngay trong ứng dụng của mình.


Sử dụng lớp
WebRequest
để tạo yêu cầu, lớp
WebResponse
để nhận đáp ứng từ web-
server, và một số dạng reader (
StreamReader

đối với dữ liệu
HTML
hay text, hoặc
BinaryReader
đối với dữ liệu nhị phân) để phân tích đáp ứng đó.
Download một file cần bốn bước cơ bản sau:
1. Sử dụng phương thức tĩnh
Create
của lớp
System.Net.WebRequest
để chỉ định trang
bạn cần. Phương thức này trả về một đối tượng dẫn xuất từ
WebRequest
, phụ thuộc vào
kiểu Uniform Resource Identifier (URI) bạn sử dụng. Ví dụ, nếu tài nguyên là HTTP
(với cụm từ
http://
), nó sẽ tạo ra đối tượng
HttpWebRequest
; nếu tài nguyên là file (với
cụm từ
file://
), nó sẽ tạo ra đối tượng
FileWebRequest
. Bạn có thể thiết lập thời gian trễ
thông qua thuộc tính
WebRequest.Timeout
.
2. Sử dụng phương thức
GetResponse

của đối tượng
WebRequest
, phương thức này trả về
một đối tượng
WebResponse
cho trang. Nếu yêu cầu vượt qua thời gian trễ thì ngoại lệ
WebException
sẽ bị ném.
3. Tạo một
StreamReader
hoặc một
BinaryReader
cho
WebResponse
.
4. Công việc cuối cùng là xử lý stream này, chẳng hạn ghi nó ra file rồi hiển thị trong ứng
dụng của bạn
Đoạn mã dưới đây sẽ lấy và hiển thị một file ảnh và nội dung HTML của một trang web.
using System;
using System.Net;
using System.IO;
using System.Drawing;
using System.Windows.Forms;
439
Chương 11: Lập trình mạng
public class DownloadForm : System.Windows.Forms.Form {
private System.Windows.Forms.PictureBox picBox;
private System.Windows.Forms.TextBox textBox;
// (Bỏ qua phần mã designer.)
private void DownloadForm_Load(object sender, System.EventArgs e) {

string picUri =
"http://localhost/winXP.gif";
string htmlUri =
"http://localhost/iishelp/iis/misc/default.asp";
// Tạo yêu cầu.
WebRequest requestPic = WebRequest.Create(picUri);
WebRequest requestHtml = WebRequest.Create(htmlUri);
// Nhận đáp ứng. Công việc này sẽ mất nhiều
// thời gian, đặc biệt khi file cần lấy quá lớn.
WebResponse responsePic = requestPic.GetResponse();
WebResponse responseHtml = requestHtml.GetResponse();
// Đọc response stream.
Image downloadedImage =
Image.FromStream(responsePic.GetResponseStream());
StreamReader r =
new StreamReader(responseHtml.GetResponseStream());
string htmlContent = r.ReadToEnd();
r.Close();
// Hiển thị ảnh.
picBox.Image = downloadedImage;
// Hiển thị nội dung dạng text của trang HTML.
textBox.Text = htmlContent;
}
}
440
Chương 11: Lập trình mạng
Hình 11.1
Download nội dung của một trang web
Để download file lớn một cách hiệu quả, bạn có thể sử dụng kỹ thuật bất đồng bộ đã được mô
tả trong chương 4. Bạn cũng có thể sử dụng phương thức

WebRequest.BeginGetResponse
,
phương thức này không chặn mã lệnh của bạn và sẽ gọi thủ tục callback khi nhận được đáp
ứng.
3.
3.
L y trang HTML t m t website có yêu c u xác th cấ ừ ộ ầ ự
L y trang HTML t m t website có yêu c u xác th cấ ừ ộ ầ ự


Bạn cần thu lấy một file từ một website, nhưng website đó yêu cầu một số thông
tin xác thực.


Sử dụng lớp
WebRequest

WebResponse
đã được mô tả trong mục 11.2. Tuy
nhiên, trước khi gửi yêu cầu, bạn phải cấu hình thuộc tính
WebRequest.Credentials
với các thông tin xác thực.
Một số website yêu cầu thông tin xác thực từ người dùng. Khi kết nối thông qua trình duyệt,
thông tin này có thể được cung cấp một cách trong suốt (ví dụ, một intranet-site cục bộ có sử
dụng Integrated Windows authentication), hoặc trình duyệt có thể yêu cầu thông tin này thông
qua một hộp thoại đăng nhập. Khi truy xuất một trang web bằng lập trình thì mã lệnh của bạn
cần phải cung cấp các thông tin này.

×