Tải bản đầy đủ (.doc) (238 trang)

ASP.NET

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 (1.54 MB, 238 trang )

1 Yêu cầu hệ thống của ASP.NET.
• Windows 2000 Server or Advanced Server with Service Pack 2 .
• Windows XP Professional or 64-Bit Edition
• MDAC 2.7 for Data
• Internet Information Services
Ghi chú:
 Khi tạo XML Web Sevices yêu cầu hệ thống giống như ASP.NET.
 Yêu cầu hệ thống cho client sử dụng XML Web Services là phải có Microsoft
.NET Framework.
Created by THÁI NGỌC DUY 1 MSDN
based-written. 11/8/2012
2 Giới thiệu về ASP.NET
2.1 ASP.NET là phiên bản kế tiếp của Active Server Page (ASP); nó là một
nền phát triển ứng dụng Web hợp nhất, cung cấp nhiều dịch vụ cần thiết
cho lập trình viên xây dựng các lớp ứng dụng chuyên nghiệp. Cú pháp
ASP.NET tượng thích với cú pháp ASP, ngoài ra ASP.NET còn cung cấp
một mô hình lập trình mới, nền tảng an toàn (secure), linh hoạt
(scalable),và ổn định (stable). Sẽ cảm thấy dễ chịu khi nâng cấp ứng
dụng ASP hiện có, bằng cách đưa vào các hàm ASP.NET cho chúng (lời
của MS).
2.2 ASP.NET là biên dịch, dựa trên môi trường .NET và có thể xây dựng bằng
bất cứ ngôn ngữ nào tương thích .NET, bao gồm Visual Basic .NET, C#,
and JScript .NET. Ngoài ra, toàn bộ thư viện .NET Framework có thể sử
dụng với ứng dụng ASP.NET, lập trình viên tận dụng dễ dàng những lợi
ích của các kỹ thuật được cung cấp, bao gồm quản lý môi trường thực thi
ngôn ngữ cung (common language runtime), kiểu an toàn (type safety),
kế thừa (inheritance), .v.v.
2.3 ASP.NET được thiết kế làm việc với các trình soạn thảo WYSIWYG HTML
đi kèm và các công cụ lập trình khác được đưa vào trong Microsoft Visual
.NET. Tất cả các công cụ này không phài chỉ dùng để phát triển ứng dụng
Web được dễ dàng, tuy nhiên có thể sử dụng một vài chức năng thông


thường cho ứng dụng Web, bao gồm một GUI cho phép lập trình viên có
thể dễ dàng đặt các server control vào trang web (web page), và một
trình debug rất mạnh mẽ.
2.4 Khi tạo một ứng dụng Web lập trình viên có thể chọn Web Forms hoặc
Web Services, ngoài ra cũng có thể kết hợp hai loại này với nhau theo
bất kỳ cách nào. Cà hai loại này có một nền cơ bản, cho phép sử dụng
authentication schemes, cache frequently used data, hoặc chỉnh sửa cấu
hình ứng dụng (customize application’s configuration). Tuy nhiên mỗi
loại có một vài khả năng riêng:
2.4.1 Web Forms cho phép xây dựng các form có nội dung phong phú (powerful forms) trên
trang Web (Web Page). Khi xây dựng các form có thể sử dụng các server control để tạo
các thành phần UI thông dụng và lập trình cho chúng một vài chức năng thông dụng,
những control này cho phép xây dựng nhanh chóng các form chỉ dùng một lần (out of
reusable built-in), hoặc các custom component, làm đơn giản mã của trang web
(simplifying the code of a page).
Created by THÁI NGỌC DUY 2 MSDN
based-written. 11/8/2012
2.5 Một XML Web Service cung cấp điều kiện (mean) để truy cập các hàm ở
server từ xa. Khi sử dụng Web Service, trong kinh doanh người ta có thể
đưa ra các giao diện lập trình được cùng với dữ liệu, hoặc kết quả kinh
doanh, những cái này có thể được nhận, hiệu chỉnh bởi các ứng dụng
client và server. Web Server cho phép trao đổi dữ liệu theo hai kịch bản
(scenarios) client-server và server-client, sử dụng chuẩn HTTP và thông
diệp XML (XML messaging) để di chuyển dữ liệu qua tường lữa
(firewall). XML Web Service có thể được viết bằng mọi ngôn ngữ lập
trình, sử dụng mọi mô hình thành phần (component model), và có thể
chạy trên bất kỳ hệ điều hành nào có thể truy cập XML Web Services.
2.6 Mô hình (model) Web Forms và Web Services đều có tất cả các đặt tính
của ASP.NET, đó là sức mạnh của .NET Framework và .NET Framework
Common Lanuage Runtime. Các tính chất và cách sử dụng có thể được

phát thảo như sau:
2.6.1 Với người đã có kỹ năng lập trình ASP thì mô hình lập trình mới ASP.NET sẽ rất gần gũi.
Tuy là như vậy nhưng ASP.NET đã có những thay đổi rất đặc biệt so với ASP, ASP.NET
đã có cấu trúc hơn và hướng đối tượng. Thật đáng tiết, điều này có nghĩa là tất cả các
trang ASP đã tồn tại đều phải được chỉnh sửa một vài nơi để có thể chạy dưới ASP.NET.
Ngoài ra, Visual Basic và Visual Basic.NET đã có một sự khác biệt rất lớn, điều này có
nghĩa là các trang được viết bằng Visual Basic Scripting Edition sẽ không thể chuyển trực
tiếp sang ASP.NET, cần thiết phải có một số thay đổi nhất định để có thể chuyển sang
ASP.NET. Để có thêm thông tin về vấn đề này hãy xem mục Migrating from ASP to
ASP.NET trong MSDN.
2.6.2 Truy cập database là kỹ thuật thường được sử dụng để hiển thị dữ liệu trên trang Web
của khách (visitor). Với ASP.NET, việc quản lý (manage) database sẽ khá dễ dàng thông
qua code. Để có nhiều thông tin hơn về vấn đề này xin xem mục Accessing Data with
ASP.NET.
2.6.3 ASP.NET cung cấp một mô hình đơn giản để lập trình viên Web có thể làm việc như trên
một ứng dụng thông thường. Lập trình viên có thể viết mã ngay trong file văn bản
global.asax, hoặc là trong một class được biên dịch, được triễn khai như là một
assembly, và có thể đưa vào các sự kiện mức ứng dụng. Ngoài ra người lập trình còn có
thể mở rộng mô hình để thích hợp cho nhu cầu của từng ứng dụng. Để có nhiều thông
tin hơn hãy xem mục ASP.NET Application trong MSDN.
2.6.4 ASP.NET tạo ra những chương trình dễ sử dụng và những session-state facility gần gủi
với lập trình viên ASP và sẳn sàng tương thích với tất cả các giao diện lập trình .NET
Framework khác (other .NET Framework APIs). Để có nhiều thông tin hơn xin xem mục
ASP.NET State Management trong MSDN.
Created by THÁI NGỌC DUY 3 MSDN
based-written. 11/8/2012
2.6.5 Đối với những lập trình viên cao cấp, người muốn sử dụng những giao diện lập trình
mạnh như giao diện ISAPI (có trong ASP), ASP.NET giới thiệu hai giao diện: IhttpHandler
và IhttpModule. Cài đặt giao diện IHttpHandler cho phép chương trình tương tác với các
yêu cầu mức thấp (low-level request) và những dịch vụ hồi báo (response services) của

IIS Web Services và cung cấp một vài chức năng giống với phần mở rộng ISAPI, nhưng
với một mô hình lập trình rất đơn giản. Cài đặt giao diện IhttpModule cho phép lập trình
viên đưa vào những customize event riêng trong mỗi yêu cầu (request) sinh ra trong ứng
dụng. Để có nhiều thông tin hơn về vấn đề này hãy xem mục HTTP Runtime Support.
2.6.6 ASP.NET có được những chất lượng thực thi được tìm thấy trong .NET Framework và
thực thi ngôn ngữ chung (common language runtime). Ngoài ra ASP.NET đã được thiết
kế cho mục đích nâng cao khả năng thực thi vượt qua ASP và tất cả các nền ứng dụng
Web khác (Lời của MS).
2.6.7 Tất cả mã của ASP.NET đều được biên dịch, việc này cho phép kết hợp dễ (early
binding), kiễu mạnh (strong type), trình biên dịch tức thời (JIT) tương thích native code.
Ngoài ra ASP.NET còn cung cấp catch mở rộng cho lập trình viên có thể tối ưu hóa ứng
dụng trong một vài trường hợp.
2.6.8 Tạo được các câu lệnh debug (custom debug statements) cho trang web, nó rất hữu ích
trong khi giãi quyết sự cố (troubleshooting).
2.6.9 Nền .NET Framework và ASP.NET cung cấp sơ đồ (schemes) chứng nhận(authentication)
và cấp phép (authorization) cho ứng dụng Web, có thể dễ dàng xóa, thêm, hiệu chỉnh sơ
đồ.
2.6.10 Cấu hình ứng dụng ASP.NET được lưu trữ trong các tập tin XML chuẩn, hiệu chỉnh dễ
dàng , và có thể mở rộng để phù hợp cho nhu cầu của từng ứng dụng Web.
Created by THÁI NGỌC DUY 4 MSDN
based-written. 11/8/2012
3 Ứng dụng ASP.NET.
3.1 Khái quát.
Một ứng dụng ASP.NET được định nghĩa là tất cả những tập tin, những điều khiển (handler), những
module và mã thực thi (executable code) có thể được gọi từ một cây thư mục ảo (virtual directory)
trên ứng dụng Web Server. Có thể sử dụng mọi mô hình lập trình ASP.NET (ASP.NET programming
models) trong ứng dụng. Tất cả chúng phải cùng tồn tại trong một cấu trúc thư mục ảo riêng lẻ.
3.2 Tập tin Global.asax.
3.2.1 Tập tin Global.asax, còn được hiểu như tập tin ứng dụng ASP.NET, là một tập tin tùy
chọn chứa mã để đáp ứng (responding) những sự kiện mức ứng dụng (application-level

events) được phát ra bởi ASP.NET hoặc những module HTTP. Tập tin Global.asax được
đặt tại thư mục gốc (root directory) của một ứng dụng ASP.NET. Khi ứng dụng chạy
(run), tập tin Global.asax được phân tích và biên dịch thành một lớp class .NET
Framework dẫn xuất từ lớp HttpApplication. Bản thân tập tin Global.asax được cấu hình
để từ chối bất kỳ yêu cầu URL trực tiếp nào; người sử dụng bên ngoài (external users)
không thể download hoặc xem mã được viết bên trong nó.
Created by THÁI NGỌC DUY 5 MSDN
based-written. 11/8/2012
3.2.2 Tập tin Global.asax của ASP.NET có thể cùng tồn tại với tập tin Global.asa của ASP. Có
thể tạo tập tin Global.asax bằng trình thiết kế WYSIWYG, bằng Notepad, hoặc như là
một lớp được biên dịch thành assambly đặt trong thư mục \bin là thư mục con của thư
mục ứng dụng.
3.2.3 Tập tin Global.asax là một tùy chọn, nếu không định nghĩa tập tin Global.asax thì
framework (ASP.NET page framework) sẽ xem như (assumes) không có bất kỳ một
event application handler và event session handler nào được định nghĩa.
3.2.4 Nếu nội dung tập tin Global.asax bị thay đổi trong lúc ứng dụng ASP.NET đang hoạt
động thì ASP.NET Page Framework sẽ tự động dò tìm sự thay đổi này. Nó sẽ thực hiện
xong tất cả những yêu cầu hiện tại, gởi sự kiện Application_OnEnd đến tất cả những bộ
lắng nghe (listeners), và khởi động lại miền ứng dụng (application domain). Trong thực
tế, ứng dụng này được khởi động lại, đóng tất cả những browse sesstion, xóa (flushing)
tất cả những thông tin trạng thái. Khi có yêu cầu kế tiếp đến từ browse, ASP.NET page
framework sẽ phân tích và biên dịch lại tập tin Global.asax thành đối tượng trong bộ
nhớ và phát ra sự kiện Application_OnStart.
3.3 Làm việc với thực thể HttpApplication.
 Trong suốt thời gian sống của ứng dụng, ASP.NET duy trùy một số thực thể Global.asax
chung dẫn xuất từ lớp HttpApplication. Khi ứng dụng ASP.NET nhận một yêu cầu HTTP
thì ASP.NET page framework sẽ chỉ định một trong những đối tượng này để xử lý yêu
cầu. Mỗi thực thể HttpApplication chịu trách nhiệm quản lý suốt thời gian sống của yêu
cầu mà nó được chỉ định quản lý, và thực thể chỉ được sử dụng lại (reused) cho yêu cầu
khác sau khi nó đã xử lý xong yêu cầu hiện tại.

 Lớp HttpApplication cho phép lập trình (overriding) truy xuất (access) các phương thức
(method), cũng như những sự kiện Application_OnStart và Application_OnEnd. Ngoài ra,
nó còn cho phép truy xuất đến bất kỳ sự kiện nào được đưa ra (exposed) bởi các module
HTTP.
3.3.1 Lập trình lại (Overriding) phương thức Init và Dispose.
3.3.1.1 Phương thức HttpApplication.Init được gọi ngay sau khi một thực thể (instance) của
lớp HttpApplication được tạo (sau khi tất cả các module quản lý sự kiện đã được add
vào). Có thể sử dụng phương thức này để tạo và cấu hình bất kỳ đối tượng nào được sử
dụng xuyên suốt (across) trong tất cả các thao tác xử lý sự kiện. Ví dụ:
<script language="C#" runat="server">
public override void Init() {
// đặt các đoạn mã thật sự cần thiết ở đây.
}
</script>
Chú ý:
 <script language="C#" runat="server"> diễn tả: sử dụng ngôn ngữ C# làm ngôn
ngữ script(language="C#"), nơi thực thi script là server (runat="server").
 Ví dụ phía trên viết để đặt vào tập tin .aspx.
Created by THÁI NGỌC DUY 6 MSDN
based-written. 11/8/2012
 Để tận dụng sức mạnh của IDE và phương pháp lập trình mới, khi lập trình ta sẽ không lập
trình lại phương thức Init() trong tập tin Global.asax, thay vào đó ta sẽ làm ngay trong lớp
Global được dẫn xuất từ lớp HttpApplication. Các ví dụ minh họa cho việc overriding
các phương thức sẽ được thực hiện theo phương pháp này.
3.3.1.2 Phương thức Init không giống với sự kiện Application_OnStart, bởi ví nó luôn luôn
được gọi trong tất cả các thực thể HttpApplication trong phạm vi một ứng dụng. Sự
kiện Application_OnStart chỉ được phát ra một lần trong suốt cuộc sống của ứng dụng,
khi thực thể (instance) HttpApplication đầu tiên được tạo. Chỉ sử dụng sự kiện
Application_OnStart để tạo và hiệu chỉnh (modify) những trạng thái (state) được chia sẽ
bởi tất cả những thực thể pipeline, như là đối tượng ApplicationState. Không sử dụng

nó để tạo các biến cục bộ, bởi vì biến cục bộ không được chia sẽ bởi nhiều thực thể
HttpApplication.Phương thức HttpApplication.Dispose được gọi trực tiếp trước khi một
thực thể của lớp HttpApplication được hũy. Có thể sử dụng nó để xóa bất kỳ local
resource nào.
3.3.1.3 Phương thức Dispose không giống với sự kiện Application_OnEnd, bởi vì nó luôn luôn
được gọi trong tất cả các thực thể của lớp HttpApplication trong phạm vi một ứng dụng.
Sự kiện Application_OnEnd chỉ được phát ra duy nhất một lần trong suốt cuộc sống của
ứng dụng, khi thực thể cuối cùng của lớp HttpApplication được hũy (torn down). Chỉ sử
dụng sự kiện Application_OnEnd để xóa những trạng thái hoặc những resource được
chia sẽ bới tất cả các thực thể pipeline, như là đối tượng ApplicationState. Không sử
dụng nó để xóa các biến cục bộ, bởi vì biến cục bộ không được chia sẽ sử dụng bởi
nhiều thực thể HttpApplication.
3.3.1.4 Không được sử dụng các thuộc tính Request, Response, Sesstion của thực thể
HttpApplication bên trong các hàm Init và Dispose của một sự thực thi yêu cầu.
3.3.1.5 Ví dụ bên dưới chỉ ra làm thế nào để override hai phương thức (method) chu kỳ sống
được cung cấp bởi lơp cơ bản HttpApplication.
<script language="C#" runat=server>
public override void Init() {
// Init override code goes here.
}
public override void Dispose() {
// Init override code goes here.
}
</script>
Chú ý:
 Ví dụ phía trên viết để đặt vào tập tin .aspx.
 Để tận dụng sức mạnh của IDE và phương pháp phát triển ứng dụng Web mới,
khi lập trình ta sẽ không thực hiện overriding các phương thức trong tập tin
Global.asax thay vào đó ta sẽ làm công việc này ngay trong lớp Global , là một
lớp được dẫn xuất từ lớp HttpApplication.

Created by THÁI NGỌC DUY 7 MSDN
based-written. 11/8/2012
3.3.2 Quản lý những sự kiện của thực thể HttpApplication.
Có thể sử dụng tập tin Global.asax để xử lý bất kỳ sự kiện nào được đưa ra (exposed)
bởi lớp cơ bản HttpApplication. Mẫu sau đây được cung cấp để thực hiện công việc này:
Application_EventName(AppropriateEventArgumentSignature)
Ví dụ: đoạn mã sau đây giải quyết các sự kiện OnStart, BeginRequest, và OnEnd cho một
ứng dụng ASP.NET, phải đặt đoạn mã vào trong tập tin Global.asax, đoạn mã trong
giống như sau:
<Script language="C#" runat="server">
public void Application_OnStart() {
// Application start-up code goes here.
}
public void Application_BeginRequest() {
// Application code for each request could go here.
}
public void Application_OnEnd() {
// Application clean-up code goes here.
}
</script>
Chú ý:
 Ví dụ phía trên viết để đặt vào tập tin .aspx.
 Để tận dụng sức mạnh của IDE và phương pháp phát triển ứng dụng Web mới,
khi lập trình ta sẽ không thực hiện overriding các phương thức trong tập tin
Global.asax thay vào đó ta sẽ làm công việc này ngay trong lớp Global , là một
lớp được dẫn xuất từ lớp HttpApplication.
3.4 Sử dụng các Module trong tập tin Global.asax.
3.4.1 Khái quát.
ASP.NET cung cấp những module khác nhau và riêng biệt trong mỗi yêu cầu và những
sự kiện được đưa ra (exposed), có thể quản lý (handle) các module này ngay trong tập

tin Global.asax hoặc ngay trong một lớp được dẫn xuất từ lớp HttpApplication . Có
thể sửa đổi (custmize) và mở rộng các module này, hoặc thậm chí có thể tạo một
module mới để xử lý thông tin về các yêu cầu HTTP. Ví dụ, có thể tạo một module
output cache để cài đặt (implements) output-caching làm việc (behaviors) cho toàn bộ
ứng dụng.
Tất cả các module, cả những module tự tạo và những module chuẩn được cung cấp bởi
ASP.NET, đều phải cài đặt giao diện IHttpModule . Chỉ cần các module được đăng ký với
ứng dụng là có thể dễ dàng tương tác (interact) với các yêu cầu HTTP đi vào ứng dụng.
3.4.2 Quản lý HTTP Module Events.
Có thể sử dụng các module trong tập tin Global.asax để quản lý bất kỳ sự kiện nào
được phát sinh trong các yêu cầu HTTP. Ví dụ, có thể tạo một custom authentication
module cho ứng dụng Web định xây dựng, trong module có xử lý sự kiện
OnAuthenticateRequest để chứng thực người dùng. Lệnh viết để điều khiển sự kiện phát
sinh (exposed) bởi một HTTP module phải phù hợp với mẫu được chỉ rỏ bên dưới.
Created by THÁI NGỌC DUY 8 MSDN
based-written. 11/8/2012
FriendlyModuleName_EventName(AppropriateEventArgumentSignature)
Ví dụ, nếu muốn đưa code để quản lý sự kiện bắt đầu và kết thúc của sesstion, cũng như
cho sự kiện OnAuthenticateRequest, nó sẽ trong giống như bên dưới.
<Script language="C#" runat="server">
void Session_OnStart() {
// Session start-up code goes here.
}
void Session_OnEnd() {
// Session clean-up code goes here.
}
void Application_OnAuthenticateRequest(Object Source, EventArgs Details) {
// Authentication code goes here.
}
</script>

Chú ý:
 Ví dụ phía trên viết để đặt vào tập tin .aspx.
 Để tận dụng sức mạnh của IDE và phương pháp phát triển ứng dụng Web mới,
khi lập trình ta sẽ không thực hiện overriding các phương thức trong tập tin
Global.asax thay vào đó ta sẽ làm công việc này ngay trong lớp Global , là một
lớp được dẫn xuất từ lớp HttpApplication.
Created by THÁI NGỌC DUY 9 MSDN
based-written. 11/8/2012
3.5 Tổng kết.
3.5.1 Ứng dụng ASP.NET là toàn bộ những tập tin nằm trong một hệ thống thư mục (ảo) phân
cấp, và gồm tất cả các đối tượng được tạo ra bởi các tập tin này.
3.5.2 Ứng dụng ASP.NET được quản lý bởi một lớp được dẫn xuất từ lớp HttpApplication.
Trong lúc chạy hệ thống ASP.NET duy trì một hoặc nhiều thực thể của lớp này (được tạo
và quản lý bởi hệ thống ASP.NET) . Có thể có nhiều yêu cầu HTTP được xử lý đồng thời.
Tuy nhiên, tại mỗi thời điểm mỗi thực thể (instance) chỉ xử lý cho một yêu cầu HTTP.
3.5.3 Có thể lập trình lại (overriding) phương thức Init() và Dispose().
3.5.4 Có thể viết mã để giải quyết các sự kiện mức ứng dụng (Application).
3.5.5 Có thể viết mã để xử lý các yêu cầu mức module (sesstion).
3.5.6 Không cần tập tin Global.asax ứng dụng ASP.NET vẫn hoạt động bình thường.
3.5.7 Tập tin Global.asa vẫn có thể tồn tại đồng thời với tập tin Global.asax.
3.5.8 Sự kiện Start() (Application_OnStart) chỉ được phát ra một lần duy nhất khi thực thể đầu
tiên quản lý ứng dụng ,thực thể của lớp dẫn xuất từ lớp HttpApplication, được tạo.
3.5.9 Sự kiện End() (Application_OnEnd) chỉ được phát ra duy nhất một lần khi thực thể cuối
cùng quản lý ứng dụng, thực thể của lớp dẫn xuất từ lớp HttpApplication, bị hũy bỏ.
3.5.10 Phương thức Application.Init() được gọi mỗi lần một thực thể quản lý ứng dụng, thực
thể của lớp dẫn xuất từ lớp HttpApplication ,được tạo ra.
3.5.11 Phương thức Application.Dispose() được gọi mỗi khi một thực thể quản lý ứng dụng bị
hũy bỏ.
3.5.12 Mỗi khi có một yêu cầu HTTP (HTTP Request) các sử kiện sẽ xảy ra lần lượt:
3.5.12.1 BeginRequest()(Application_BeginRequest): bắt đầu yêu câu HTTP.

3.5.12.2 AuthenticateRequest() (Application_AuthenticateRequest): chứng
thực yêu cầu.
3.5.12.3 EndRequest() (Application_EndRequest): đã xử lý xong yêu cầu.
3.5.13 Khi một client kết nối vào Server sự kiện Start() (Session_Start) sẽ phát ra.
3.5.14 Khi client ngắt kết nối với Server ngoài khoảng thời gian timeout sự kiện End()
(Session_End) sẽ được phát ra.
3.5.15 Sự kiện Error() (Application_Error) được phát ra khi xuất hiện một
lổi không được quản lý (unhandled exception).
3.6 Tham khảo lớp HttpApplication .
Created by THÁI NGỌC DUY 10
MSDN based-written. 11/8/2012
3.7 Tham khảo Giao diện IHttpModule.
4 Cấu hình ASP.NET.
4.1 Khái qúat .
- Đặc điểm hệ thống cấu hình của ASP.NET là một thành phần có thể mở rộng
được, cho phép định nghĩa những thiết lập hệ thống khi triễn khai ứng dụng
ASP.NET lần đầu tiên, sau đó có thể thêm, sửa lại những thiết lập cấu hình tại
bất cứ thời điểm nào với một sự tác động nhỏ trên các ứng dụng Web và các
Server.
- Hệ thống cấu hình của ASP.NET mang lại các lợi ích sau:
 Thông tin cấu hình được lưu trữ trong tập tin XML chuẫn, cho nên, có thể sử
dụng các trình soạn thảo văn bản chuẫn (notepad) hoặc các ứng dụng phân
tích XML (XML Parser) để tạo và hiệu chỉnh nó một cách khá dễ dàng.
 Có nhiều tập tin cấu hình, tất cả đều được đặt tên là Web.config, có thể xuất
hiện trong nhiều thư mục của một ứng dụng Server ASP.NET. Mỗi tập tin
cấu hình áp dụng những thiết lập cấu hình cho thư mục chứa nó và những thư
mục con bên dưới nó. Theo mặc định, những thư mục con sẽ có những thiết
lập cấu hình của tập tin Web.config trong thư mục cha, tuy nhiên, những tập
tin cấu hình trong thư mục con có thể bổ sung, hiệu chĩnh, và thậm chí còn có
thể định nghĩa chòng những thiếg lập của tập tin cấu hình trong thư mục cha.

Tập tin cấu hình mức cao nhất có tên là:
C:\WINNT\Microsoft.NET\Framework\ version\CONFIG\Machine.config , nó
được cung cấp bởi ASP.NET và thiết lập cấu hình cho toàn Web Server.
 Trong khi chạy, ASP.NET sử dụng thông tin cấu hình được cung cấp trong
cấu trúc phân cấp của thư mục ảo để tính ra một thiết lập tổng hợp cho mỗi
nguồn lực (resource) duy nhất. Chý ý, hệ thống phân cấu thư mục ở đây là hệ
thống thư mục ảo của IIS, không liên quan đến hệ thống thư mục thường
được quản lý bởi hệ điều hành.
 ASP.NET tự động dò tìm những thay đổi trong các tập tin thiết lập cấu hình
và tự động áp dụng những thiết lập cấu hình mới cho những trang Web có
liên quan. Web Server không cần phải khởi động lại để các thiết lập cấu hình
mới có hiệu lực. Thiết lập cấu hình phân cấp (tổng hợp của nhiều tập tin cấu
hình) tự động được tính và lưu trữ lại bất cứ khi nào hệ thống phân cấp các
tập tin cấu hình có sự thay đổi. Chú ý, những quy tắt ở trên không được tính
với khối <processModel> trong tập tin cấu hình.
 Hệ thống cấu hình của ASP.NET cho phép mở rộng, có thể thêm vào các
thông số cấu hình (configuration parameters), và tạo các vùng điều khiểnc
cấu hình (configuration section handlers) để xử lý chúng.
Created by THÁI NGỌC DUY 11
MSDN based-written. 11/8/2012
 ASP.NET bảo vệ các tập tin cấu hình từ sự truy cập từ bên ngoài bằng cách
cấu hình IIS ngăn cản truy cập trực tiếp từ Browse đến các tập tin cấu hình.
Mã lỗi 403 sẽ được trã về cho bất kỳ sự truy cập trực tiếp nào.
4.2 Định dạng của tập tin cấu hình trong ASP.NET.
- Thông tin cấu hình cho nguồn lực ASP.NET (ASP.NET resource) chứa
trong một tập hợp các tập tin cấu hình, mỗi tập tin đều được đặt tên là
Web.config. Mỗi tập tin cấu hình chứa một hệ thống cấp bậc các tag XML
và các subtag cùng với những thuộc tính chỉ định những thiết lập cấu
hình. Bởi vì những tag phải có cấu trúc XML đúng chuẫn (well-formed
XML) cho nên tag, subtag, attributes phân biệt dạng chữ (case-

sensitive). Tên của tag và tên của attributes phải là camel-case, điều này
có nghĩa là ký tự đầu tiên của tên tag phải là chử thường, và ký tự đầu
tiên của bất kỳ từ theo sau nào phải là chử hoa. Giá trị của thuộc tính
phải là Pascal-case.
- Tất cả thông tin cấu hình đều được đặt giữa cặp <configuration> and
<configuration>. Thông tin cấu hình giữa các tag được nhóm vào hai
khối (area) chính: khối định nghĩa điều khiển cấu hình section (the
configuration section handler declaration area) và khối (area) thiết lập cấu
hình section (the configuration section settings area).
 Khối định nghĩa điều khiển xuất hiện tại phần đầu của tập tin cấu
hình giữa cặp tag <configSections> and </configSections>. Mỗi
một sự định nghĩa chứa trong một tag <section> chỉ rỏ tên của một
vùng (section), mỗi section cung cấp một tập hợp dữ liệu cấu hình và
tên của các lớp .NET Framework xử lý dữ liệu cấu hình trong section
này.
 Khối thiết lập cấu hình vùng (section) theo sau khối
<configSections> và chứa các thiết lập cấu hình thật sự. Có mỗi
khối thiết lập cấu hình vùng (section) cho mỗi định nghĩa vùng
(section) trong khối <configSections>. Mỗi cấu hình vùng chứa các
subtag, các attribute chứa các thiết lập cho vùng.
Created by THÁI NGỌC DUY 12
MSDN based-written. 11/8/2012
- Tập tin Web.config bên dưới là một ví dụ định nghĩa hai điều khiển cấu
hình (declares two configuration section handlers). Cái thứ nhất quản lý
các thiết lập cho ứng dụng, và cái còn lại quản lý trạng thái section.
<configuration>
<configSections>
<section name="appSettings"
type="System.Configuration.NameValueFileSectionHandler,
System, Version=1.0.3300.0,

Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="sessionState"
type="System.Web.SessionState.SessionStateSectionHandler,
System.Web, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
allowDefinition="MachineToApplication" />
</configSections>
<appSettings>
<add key="dsn" value="localhost;uid=MyUserName;pwd=;" />
<add key="msmqserver" value="server\myqueue" />
</appSettings>

<sessionState cookieless="true" timeout="10" />
</configuration>

- Chỉ cần định nghĩa khối điều khiển cấu hình section (configuration section
handler) một lần duy nhất, có thể đặt nó trong tập tin thiết lập cấu hình
toàn server Machine.config hoặc trong tập tin Web.config trong thư mục
ảo chứa các tập tin của ứng dụng Web. Các tập tin cấu hình trong thư
mục con sẽ tự động thừa kế các định nghĩa điều khiển cấu hình trong thư
mục cha. Để có nhiều thông tin hơn về vấn đề này xin xem mục
Configuration Inheritance trong MSDN.
- Các thiết lập cấu hình được đặt bên trong các tag phân nhóm section
(section grouping tags). Những section tag ở mức cao (top-level section
tags) thường mô tả namespace mà những thiết lập cấu hình tác dụng lên.
Ví dụ, tag <system.net> mô tả những thiết lập cho những lớp mạng,
và tag <system.web> mô tả những thiết lập cho những lớp ASP.NET.
Ví dụ bên dưới chỉ rỏ vị trí của các tag.
<configuration>
<configSections>

<sectionGroup name="system.net">
<section name="authenticationModules"
type="System.Net.Configuration.NetAuthenticationModuleHandler,
System, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
<section name="webRequestModules"
type="System.Net.Configuration.WebRequestModuleHandler,
System, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
</sectionGroup>
<sectionGroup name="system.web">
<section name="authorization"
type="System.Web.Configuration.AuthorizationConfigHandler,
Created by THÁI NGỌC DUY 13
MSDN based-written. 11/8/2012
System.Web, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<section name="sessionState"
type="System.Web.SessionState.SessionStateSectionHandler,
System.Web, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
allowDefinition="MachineToApplication" />
</sectionGroup>
</configSections>
<system.net>
<! — Net Class Settings would go here. -->
</system.net>
<system.web>
<authorization>
<allow users="*" /> <!-- Allow all users -->

<!-- Allow or deny specific users.
allow users="[comma separated list of users]"
roles="[comma separated list of roles]"/>
<deny users="[comma separated list of users]"
roles="[comma separated list of roles]"/>
-->
</authorization>
<sessionState
sqlConnectionString="data source=127.0.0.1;
user id=sa;password="
cookieless="false"
timeout="10"
/>
</system.web>
</configuration>
5 Truy cập những thiết lập cấu hình của ASP.NET.
Có thể truy cập vào những thiết lập cấu hình công cộng (public) của ASP.NET từ
một ứng dụng ASP.NET bằng cách sử dụng những phương thức tỉnh nội (intrinsic
static methods) được đưa ra (exposed) bởi ASP.NET. Ví dụ, để đọc giá trị của thuộc
tính cookieless trong section <sessionState> có thể sử dụng đoạn mã lệnh sau đây:
bool nocookies = Session.Cookieless;
Những thiết lập rỏ ràng của ứng dụng (Application-specific settings) được lưu
trữ trong section <appSettings> của những tập tin Web.config, có thể sử dụng tập hợp
tỉnh kiểu chuỗi ConfigurationSettings.AppSettings để truy cập đến nó, ví dụ:
String dsn = ConfigurationSettings.AppSettings["dsn"];
6 Tạo những Configuration Sections mới.
- Có thể mở rộng những thiết lập cấu hình chuẩn của ASP.NET với những tag
cấu hình XML (XML configuration tags) tự định nghĩa. Để làm công việc
này, đầu tiên phải tạo một điều khiển cấu hình section (configuration
section handler). Điều khiển (handler) phải là một lớp .NET Framework có

cài đặt giao diện IconfigurationSectionHandler. Những điều khiển section
Created by THÁI NGỌC DUY 14
MSDN based-written. 11/8/2012
(section handler) thông dịch và xử lý (processes) những thiết lập đã được
định nghĩa trong các tag XML đã được phân chia (portion) rỏ ràng trong tập
tin Web.config, và trả về một đối tượng cấu hình thích hợp (appropriate)
dựa trên những thiết lập cấu hình. Đối tượng cấu hình (configuration
object), cái được trả về bởi handler class, có thể có cấu trúc dữ liệu không
cố định; nó không bị giới hạn bởi những lớp cấu hình hoặc những định
dạng cấu hình cơ bản.
- Ví dụ bên dưới định nghĩa một giao diện IconfigurationSectionHandler.
namespace System.Web.Configuration
{
public interface IConfigurationSectionHandler
{
public Object Create(Object parent, Object input,
XmlNode node);
}
}
- Sau khi cài đặt giao diện IconfigurationSectionHandler, phải định nghĩa một
section trong tập tin Web.config như sau:
<configuration>
<configSections>
<sectionGroup name="myGroup">
<sectionGroup name="nestedGroup">
<section name="mySection"
type="System.Configuration.NameValueSectionHandler,
System, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=9b35aa32c18d4fb1 />
</sectionGroup>

</configSections>
<myGroup>
<nestedGroup>
<mySection>
<add key="key_one" value="1" />
<add key="key_two" value="2" />
</mySection>
</nestedGroup>
</myGroup>
</configuration>
Created by THÁI NGỌC DUY 15
MSDN based-written. 11/8/2012
- Có thể đọc giá trị của configuration section vừa được định nghĩa bằng đoạn code
sau:
NameValueCollection config = (NameValueCollection)
ConfigurationSettings.GetConfig("mygroup/nestedgroup/mysection");
Response.Write("The value of key_one is " + config["key_one"] + "<br>");
Response.Write("The value of key_two is " + config["key_two"] + "<br>");
7 Sơ đồ thiết lập cấu hình của ASP.NET.
Sơ đồ cấu hình section (configuration section schema) chứa các đơn vị (element) để
điều khiển ứng dụng ASP.NET sẽ hoạt động như thế nào. Sơ đồ tổng quát như sau:
(Mọi người tạm xem nha, Hồi sau sẽ có tiếng việt đầy
đủ)
<configuration>
<system.web>
<authentication>
<forms>
<credentials>
<passport>
<authorization>

<allow>
<deny>
<browserCaps>
<result>
<use>
<filter>
<case>
<clientTarget>
<add>
<remove>
<clear>
<compilation>
<compilers>
<compiler>
<assemblies>
<add>
<remove>
<clear>
<customErrors>
<error>
<globalization>
<httpHandlers>
<add>
<remove>
Created by THÁI NGỌC DUY 16
MSDN based-written. 11/8/2012
<clear>
<httpModules>
<add>
<remove>

<clear>
<httpRuntime>
<identity>
<machineKey>
<pages>
<processModel>
<securityPolicy>
<trustLevel>
<sessionState>
<trace>
<trust>
<webServices>
<protocols>
<add>
<remove>
<clear>
<serviceDescriptionFormatExtensionTypes>
<add>
<remove>
<clear>
<soapExtensionTypes>
<add>
<soapExtensionReflectorTypes>
<add>
<soapExtensionImporterTypes>
<add>
<WsdlHelpGenerator>
</webServices>
</system.web>
</configuration>

Element Description
<system.web> Chỉ đơn vị cấu hình cao nhất cho ASP.NET
configuration section.
<add> for <assemblies> Thêm một tham chiếu đến assembly được sử
dụng trong suốt qúa trình biên dịch của một
nguồn lực động (dynamic resource)
<add> for <clientTarget> Adds an alias for a specific user agent to an
internal collection of user agent aliases.
<add> for <httpHandlers> Adds a reference to an assembly to use
during compilation of a dynamic resource.
Created by THÁI NGỌC DUY 17
MSDN based-written. 11/8/2012
<add> for <httpModules> Adds a reference to an assembly to use
during compilation of a dynamic resource.
<add> for <protocols> Adds a transmission protocol that the .NET
Framework can use to decrypt data sent from
a client browser in the HTTP request.
<add> for
<serviceDescriptionFormatExtensionTypes>
Adds a service description format extension
to run within the scope of the configuration
file.
<add> for <soapExtensionTypes>,
<soapExtensionImporterTypes>, and
<soapExtensionReflectorTypes>
Adds a SOAP extension to run with all XML
Web services within the scope of the
configuration file.
<allow> Allows access to a resource.
<assemblies> Specifies ASP.NET compilation processing

directives.
<authentication> Configures ASP.NET authentication support.
<authorization> Configures ASP.NET authorization support.
<browserCaps> Configures the settings for the browser
capabilities component.
<case> Allows pattern matching to stop after
processing the first successful match out of a
number of alternatives.
<clear> Removes all references to items appropriate
to the parent tag.
<clientTarget> Adds aliases for specific user agents to an
internal collection of user agent aliases.
<compilation> Contains all the compilation settings used by
ASP.NET.
<compiler> Defines a new compiler option.
<compilers> Specifies the compilers that the ASP.NET
application supports.
<credentials> Allows optional definition of name and
password credentials within the configuration
file.
<customErrors> Defines custom error messages for an
ASP.NET application and the pages that a
browser is redirected to when errors occur.
<deny> Specifies that access to a resource is denied.
<error> Defines one custom error condition that will
be handled by a custom error page.
<filter> Allows multiple rules to be applied in
sequence.
<forms> Configures an ASP.NET application for
custom forms-based authentication.

Created by THÁI NGỌC DUY 18
MSDN based-written. 11/8/2012
<globalization> Configures the globalization settings of an
application.
<httpHandlers> Maps incoming URL requests to
IHttpHandler classes.
<httpModules> Adds, removes, or clears HTTP modules
within an application.
<httpRuntime> Configures ASP.NET HTTP runtime
settings. This section can be declared at the
machine, site, application, or subdirectory
level.
<identity> Controls the application identity of the Web
application.
<machineKey> Configures keys to use for encryption and
decryption of forms authentication cookie
data. This section allows developers to
configure a validation key that performs
message authentication checks on view state
data and forms authentication tickets. It can
be declared at the machine, site, or
application levels, but not at the subdirectory
level.
<pages> Identifies page-specific configuration
settings.
<passport> Specifies the page to redirect to if the page
requires authentication and the user has not
signed on with Microsoft Passport
authentication.
<processModel> Configures the ASP.NET process model

settings on Internet Information Services
(IIS) Web server systems.
<protocols> Specifies the transmission protocols that
ASP.NET can use to decrypt data sent from a
client browser in the HTTP request.
<remove> for <assemblies> Removes a reference to an assembly.
<remove> for <clientTarget> Removes an alias for a specific user agent
from an internal collection of user agent
aliases.
<remove> for <httpHandlers> Removes a verb/path mapping to an
HttpHandler class.
<remove> for <httpModules> Removes a reference to an HttpModule
class. The value of <remove> must exactly
match that of a previous <add> directive.
<remove> for <protocols> Removes a single protocol from a specific
application's list of supported HTML
Created by THÁI NGỌC DUY 19
MSDN based-written. 11/8/2012
encoding protocols.
<remove> for
<serviceDescriptionFormatExtensionTypes>
Removes a single service description format
extension type from within the scope of the
configuration file.
<result> The HttpCapabilitiesBase-derived class
used to hold the results (key-value string
pairs) from parsing this section. This string is
used at run time to create the return type.
<securityPolicy> Defines valid mappings of named security
levels to policy files. This section can be

declared at the machine, site, or application
levels.
<serviceDescriptionFormatExtensionTypes> Specifies the service description format
extensions to run within the scope of the
configuration file.
<sessionState> Configures some session-state settings for
the current application.
<soapExtensionImporterTypes> Specifies the SOAP extensions to run when a
service description for an XML Web service
within the scope of the configuration file is
accessed.
<soapExtensionReflectorTypes> Specifies the SOAP extensions to run when a
service description is generated for all XML
Web services within the scope of the
configuration file.
<soapExtensionTypes> Specifies the SOAP extensions to run with
all XML Web services within the scope of
the configuration file.
<trace> Configures the ASP.NET trace service.
<trust> Configures the code access security
permission set used to run a particular
application. This section can be declared at
the machine, site, and application levels.
<trustLevel> Defines the mapping of specific security
levels to named policy files.
<use> Specifies the HTTP request strings sent to
this parser.
<user> Allows definition of user name and password
credentials within the configuration file.
<webServices> Controls the settings of XML Web services

created using ASP.NET.
<WsdlHelpGenerator> Specifies the .aspx Help page for an XML
Web service.
Created by THÁI NGỌC DUY 20
MSDN based-written. 11/8/2012
TRUY CẬP DỮ LIỆU TRONG MÔI TRƯỜNG .NET
----------------------
I. Giới thiệu về ADO.NET
I.1. Tổng quan về ADO.NET
ADO.NET cung cấp việc truy cập các nguồn dữ liệu một cách nhất quán như SQL
Server, cũng như những nguồn dữ liệu quản lý thông qua OLE DB và XML. Những ứng
dụng sử dụng dữ liệu chia sẽ có thể dùng ADO.NET để kết nối đến những nguồn dữ liệu
này, cũng như truy xuất, thao tác và cập nhật dữ liệu.
ADO.NET dễ dàng quản lý việc truy cập dữ liệu từ việc thao tác trên cơ sở dữ liệu
thông qua những thành phần riêng lẽ mà có thể dùng chung hoặc dùng riêng lẽ
các thành phần này. ADO.NET bao gồm các trình cung cấp dữ liệu .NET (.NET
data provider) cho việc kết nối đến cơ sở dữ liệu, thực thi một câu lệnh và truy
xuất kết quả. Các kết quả này hoặc là được xử lý trực tiếp hoặc là được đặt trong
một đối tượng ADO.NET Dataset, cho người dùng thao tác trên đối tượng này .
Đối tượng ADO.NET Dataset cũng có thể được sử dụng một cách độc lập với .NET
data provider để quản lý dữ liệu thuộc những ứng dụng hoặc những nguồn từ
XML.
Lớp ADO.NET được tìm thấy trong namespace System.Data, và được tích hợp với
lớp XML, lớp này được tìm thấy trong namespace System.Xml Connection
Sự khác nhau giữa ADO.NET và ADO
1. Sự thể hiện dữ liệu .
 ADO dữ liệu được lưu trữ ở dạng recordset , còn ADO.NET lưu trữ dạng
dataset .Đây là điểm khác biệt quan trọng nhất .
2. Số table .
 Một recordset như là một table , nếu recordset chứa nhiều tables thì nó phải

dùng phép JOIN query kết các bảng lại, lấy dữ liệu từ các tables khác nhau
tập hợp lại thành một tables đơn .
 Ngược lại , dataset là một collection của một hoặc nhiều tables .Các tables bên
trong một dataset có thể gọi trực tiếp từng tables thông qua đối tượng
DaTaTable . Nếu một dataset chứa nhiều tables ,nó sẽ chứa nhiều đối tượng
DataTable .Tức là ,mỗi DataTable điển hình tương đương với một table hoặc là
một view. Như vậy một dadaset có cấu trúc tương tự như một database.
 Ngoài ra , một dataset còn chứa các mối quan hệ .Một mối quan hệ của
dataset tương tư như là mối quan hệ khoá ngoại của database ; tức là ,nó kết
hợp các dòng của table này với table khác
 Ví dụ : Một dataset chứa một table về thông tin nhà đầu tư (investors ) và
một table khác lưu trữ lĩnh vực đầu tư (purchases) . Nó có thể chứa mối quan
hệ mỗi dòng investors table tương ứng mỗi dòng của purchases .
 Bởi vì dataset có nhiều ngăn với nhiều tables tách rời nhau và các thông tin về
mối quan hệ giữa các table với nhau . Vì vậy cấu trúc dữ liệu nhiều hơn
recordset và chứa các mối quan hệ trên tables với nhau .
3. Sự ảnh hưởng dữ liệu và con trỏ .
Created by THÁI NGỌC DUY 21
MSDN based-written. 11/8/2012
 Trong ADO ta có thể duyệt liên tục các dòng của recordset ta dùng phương
thức ADO MoveNext .Trong ADO.NET, các dòng được thể hiện như một
collection. Vì vậy, ta có thể sử dụng vòng lặp thông qua một table như là
thông qua một collection, hoặc là truy cập trực tiếp các dòng thông qua số thứ
tự hoặc khoá chính. Đối tượng DataRelation chứa thông tin chính và chi tiết
của một record và cung cấp phương thức cho phép truy xuất record quan hệ
với các record mà ta đang thao tác.
 Con trỏ là một phần tử của database điều khiển hoạt động của record ,khả
năng update dữ liệu và xem xét sự chuyển đồi dữ liệu bởi các user khác
nhau .ADO.NET không có đối tượng con trỏ vốn có,nhưng thay vào đó nó chứa
data class cung cấp các phương thức như con trỏ truyền thống.

4. Tối ưu các kết nối mở .
 ADO.NET thường mở một connection đủ để thực thi một thao tác trên
database ,ví dụ như select hoặc update sau khi thực thi select hoặc update thì
connection tự ngắt ,ta có thể đọc các dòng vào dataset và thao tác trên nó mà
không cần giữ kết nối đến data source.Trong ADO, recordset có thể cung cấp
ngắt kết nối ,nhưng ADO được thiết kế chính cho mục đích kết nối liên tục.
 Một khác biệt quan trọng việc xử lý disconnected trong ADO và ADO.NET .
Trong ADO, bạn giao tiếp với cơ sở dữ liệu bằng cách thực hiện cuộc gọi đến
Ole Db Provider. Trong ADO.NET, bạn giao tiếp với cơ sở dữ liệu thông qua
một DataAdapter(OleDbDataAdapter hay SqlDataAdapter), nó thực hiện việc
gọi đến Ole Db provider hay APIs (được cung cấp bởi nguồn dữ liệu cơ bản).
Sự khác nhua quan trọng là trong ADO.NET, data adapter cho phép bạn điều
khiển cách thay đổi trên dataset được chuyển xuống cơ sở dữ liệu.
5. Chia sẻ dữ liệu giữa các ứng dụng .
 Việc truyền một ADO.NET Dataset giữa các ứng dụng thì dễ dàng hơn việc
truyền một ADO disconnected recordset. Để chuyển một ADO disconnected
recordset từ một thành phần đến một thành phần khác, bạn sử dụng COM
marshalling. Để truyền dữ liệu trong ADO.NET, bạn sử dụng một Dataset, nó
cũng có thể chuyển một Xml stream.
 Việc truyền các file Xml thì thuận lợi hơn truyền COM marshalling.
 Nhiều kiểu dữ liệu hơn: COM marshalling giới hạn kiểu dữ liệu, chỉ các
kiểu được định nghĩa theo chuẩn của COM. Bởi vì việc truyền của Dataset
trong ADO.NET dựa trên khuôn dạng XML, vì thế không giới hạn kiểu dữ
liệu
 Khả năng thực hiện: Việc truyền một ADO recordset lớn hay một
ADO.NET dataset lớn có thể sử dụng tài nguyên mạng, như số lượng
dòng dữ liệu. Cả 2 ADO và ADO.NET đều cho phép bạn tối thiểu dữ liệu
được truyền. Nhưng ADO.NET cung cấp một khả năng thực hiện thuận lợi
hơn, trong ADO.NET không đòi hỏi việc chuyển đổi kiểu dữ liệu. ADO yêu
cầu COM marshalling chuyển đổi kiểu dữ liệu cho phù hợp với kiểu dữ

liệu của COM.
 Vấn đề bức tường lửa: Việc sử dụng ADO.NET sẽ giúp ta dễ dàng trong
việc truyền dữ liệu giữa các thành phần
Created by THÁI NGỌC DUY 22
MSDN based-written. 11/8/2012
ms-
help://MS.VSCC/MS.MSDNVS/vbcon/html/vbconadopreviousversionsof
ado.htm
I.1 Cấu trúc của ADO.NET
I.1.1.XML và ADO.NET
ADO.NET kết hợp với sức mạnh của XML để cung cấp truy xuất dữ liệu ngắt đoạn.
ADO.NET được thiết kế tay trong tay với lớp XML trong .NET Framework, cả 2 là những
thành phần của một kiến trúc đơn.
ADO.NET và lớp XML của .NET Framework cùng sử dụng đối tượng Dataset.
Dataset có thể được nạp dữ liệu từ nguồn XML, có thể là 1 file XML hay là 1 dòng
XML nào đó.
I.1.2.ADO.NET Component
ADO.NET Components được thiết kế để quản lý việc truy cập dữ liệu từ nguồn
dữ liệu. Có 2 thành phần chính trong ADO.NET: Dataset và .NET Data Provider - một
tập hợp các thành phần bao gồm các đối tượng Connection, Command, DataReader,
DataAdapter.
ADO.NET Dataset là thành phần chính của kiến trúc kết nối gián đoạn của
ADO.NET. Dataset được thiết kế một cách rõ ràng cho việc truy cập dữ liệu không phụ
thuộc vào bất kỳ nguồn dữ liệu nào. Và kết quả là nó có thể sử dụng nhiều nguồn dữ
liệu khác nhau. Dataset bao gồm tập hợp một hoặc nhiều đối tượng DataTable được tạo
thành từ nhiều dòng và nhiều cột dữ liệu, cũng như các khoá chính, khoá ngoại, các
ràng buộc và các mối quan hệ của các đối tượng DataTable.
Thành phần chính khác của ADO.NET là .NET Data Provider. Thành phần này được
thiết kế cho việc thao tác dữ liệu và chắc chắn, truy cập dữ liệu forward only, read only.
Đối tượng Connection cung cấp việc kết nối đến nguồn dữ liệu. Đối tượng command cho

phép truy cập các câu lệnh cơ sở dữ liệu để lấy kết quả trả về, dữ liệu thay đổi, thực thi
các stored procedure, gửi hoặc nhận thông tin các tham số (parameter). DataReader
cung cấp một luồng truy xuất dữ liệu nhanh từ nguồn dữ liệu. Cuối cùng DataAdapter
cung cấp một cầu nối giữa đối tượng Dataset và cơ sở dữ liệu. DataAdapter sử dụng đối
tượng Command để thực thi các câu lệnh SQL dưới cơ sở dữ liệu để load dữ liệu lên
Dataset và cập nhật những thay đổi trên Dataset xuống cơ sở dữ liệu
Bạn có thể viết .NET Data Provider bằng bất kỳ nguồn dữ liệu nào. .NET
Framework thông qua 2 .NET Data Provider là: SQL Server .NET Data Provider và OLE
DB .NET Data Provider.
Created by THÁI NGỌC DUY 23
MSDN based-written. 11/8/2012
Các thành phần trong kiến trúc của ADO.NET
I.1.3.Chọn lựa DataReader hay Dataset
Khi quyết định ứng dụng của bạn sẽ sử dụng DataReader hay DataSet, bạn
nên quan tâm đến những chức năng mà ứng dụng của bạn yêu cầu. Bạn nên
dùng Dataset khi:
 Tách biệt dữ liệu giữa các lớp hoặc từ một XML Wed Service
 Tương tác dữ liệu một cách năng động như liên kết với Window Forms control
hoặc kết hợp và quan hệ dữ liệu từ nhiều nguồn khác nhau.
 Lưu trữ dữ liệu cục bộ trong ứng dụng của bạn
 Cung cấp một cách nhìn về mối quan hệ dữ liệu XML phân tầng và sử dụng
những công cụ giống như XSL Transformation hoặc một XLM Path Language
(XPath) Query trên dữ liệu của bạn
 Thực hiện rộng rãi việc xử lý dữ liệu không yêu cầu một kết nối mở đến nguồn
dữ liệu. Thực hiện việc giải phóng kết nối để được dùng bởi các Client khác
Nếu bạn không yêu cầu các chức năng được cung cấp bởi Dataset, bạn có thể cải
thiện khả năng ứng dụng của bạn bằng cách sử dụng DataReader
II. Đối tượng Dataset
Đối tượng Dataset là thành phần chính để hổ trợ việc kết nối ngắt đoạn, là kịch
bản phân bổ dữ liệu với ADO.NET. Dataset là bộ nhớ tạm, nó là một bản sao dữ liệu mà

cung cấp một mô hình lập trình quan hệ nhất quán không quan tâm đến nguồn dữ liệu.
DataSet bao gồm tập hợp các đối tượng DataTable mả bạn có thể thiết lập mối quan hệ
giữa chúng thông qua đối tượng DataRelation. Bạn cũng có thể làm cho dữ liệu trong
DataSet được nhất quán bằng cách sử dụng đối tượng UniqueConstraint và
ForeignKeyConstraint
Mô hình đối tuợng Dataset
Mô hình đối tuợng Dataset
Created by THÁI NGỌC DUY 24
MSDN based-written. 11/8/2012
Mô hình đối tuợng Dataset
 Các thành phần của đối tượng DataSet
 Public properties
Thuộc tính Diễn tả
CaseSensitive Thiết lập hay trả về một giá trị cho biết so sánh chuỗi bên
trong các đối tượng DataTable có phân biệt hoa thường
hay không
Container(kế thừa từ
MarshalByValueComponent
)
Trả về container cho thành phần
DataSetName Thiết lập hay trả về tên của DataSet hiện hành
DefaultViewManager
DesignMode
EnforceConstraints
ExtendedProperties
HasErrors
Locale
Namespace Thiết lập hay trả về namespace của DataSet
Prefix
Relations Trả về một tập hợp các quan hệ liên kết các

bảng(DataTable) trong DataSet và cho phép định hướng
từ bảng cha đến bảng con
Sites
Tables Trả về tập hợp bảng(DataTable) chứa bên trong DataSet
 Public methods
a. AcceptChanges
Created by THÁI NGỌC DUY 25
MSDN based-written. 11/8/2012

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×