1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Cơ sở dữ liệu Trong Microsoft .NET Framework phần 1 docx

8 454 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chương 10: Cơ sở dữ liệu trong Microsoft .NET Framework
Chuyên ngành Cơ sở dữ liệu
Định dạng
Số trang 8
Dung lượng 183,69 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

# Tạo một đối tượng kết nối phù hợp với kiểu cơ sở dữ liệu mà bạn cần kết nối; tất cả các đối tượng kết nối đều hiện thực giao diện System.Data.IDbConnection.. Bạn có thể cung cấp một c

Trang 1

Chương 10 : Cơ sở dữ liệu

Trong Microsoft NET Framework, việc truy xuất đến các loại data-source (nguồn dữ liệu) được cho phép thông qua một nhóm các lớp có tên là Microsoft ADO.NET Mỗi loại

source được hỗ trợ thông qua một provider (bộ cung cấp dữ liệu) Mỗi data-provider gồm tập các lớp không chỉ hiện thực tập giao diện chuẩn, mà còn cung cấp chức năng duy nhất của data-source mà nó hỗ trợ Các lớp này mô tả về kết nối, câu lệnh, thông số, data-adapter (bộ điều hợp dữ liệu), và data-reader (bộ đọc dữ liệu) mà qua đó, bạn có thể tương tác với một loại source Bảng 10.1 liệt kê các hiện thực

data-provider trong NET

Bảng 10.1 Các hiện thực data-provider trong NET Framework

Data-provider Mô tả

.NET

Framework

Data Provider

for ODBC

Cung cấp kết nối đến mọi data-source có hiện thực giao

diện ODBC; bao gồm Microsoft SQL Server, Oracle, và Microsoft Access Các lớp data-provider nằm trong

không gian tên System.Data.Odbc và có tiền tố Odbc

.NET

Framework

Data Provider

for OLE DB

Cung cấp kết nối đến mọi data-source có hiện thực giao diện OLE DB; bao gồm Microsoft SQL Server, MSDE, Oracle, và Jet Các lớp data-provider nằm trong không

gian tên System.Data.OleDb và có tiền tố OleDb

.NET

Framework

Data Provider

for Oracle

Cung cấp kết nối đến Oracle Các lớp data-provider nằm

trong không gian tên System.Data.OracleClient và có tiền tố Oracle

.NET

Framework

Data Provider

for SQL

Server

Cung cấp kết nối đến Microsoft SQL Server phiên bản 7

và mới hơn (gồm cả MSDE) bằng cách liên lạc trực tiếp với SQL Server mà không cần sử dụng ODBC hay OLE

DB Các lớp data-provider nằm trong không gian tên

System.Data.SqlClient và có tiền tố Sql

Trang 2

.NET

Compact

Framework

Data Provider

for SQL

Server CE

Cung cấp kết nối đến Microsoft SQL Server CE Các lớp

data-provider nằm trong không gian tên System.Data.SqlServerCe và có tiền tố SqlCe

Chương này mô tả một vài khía cạnh thường được sử dụng nhất của ADO.NET Tuy nhiên, ADO.NET là một phần con mở rộng của thư viện lớp NET Framework và chứa một lượng lớn các chức năng cao cấp Do đó, để có thể hiểu rõ hơn về ADO.NET, bạn nên tìm đọc một quyển sách khác chuyên về ADO.NET Những đề mục trong chương này

trình bày các vấn đề sau:

„ Cách tạo, cấu hình, mở, và đóng kết nối cơ sở dữ liệu (mục 10.1)

„ Cách sử dụng connection-pooling để cải thiện hiệu năng và tính quy mô của các ứng dụng có sử dụng kết nối cơ sở dữ liệu (mục 10.2)

„ Cách thực thi các câu lệnh SQL và các thủ tục tồn trữ (Stored Procedure), và cách

sử dụng các thông số để cải thiện tính linh hoạt của chúng (mục 10.3 và 10.4)

„ Cách xử lý kết quả được trả về từ truy vấn cơ sở dữ liệu (mục 10.5 và 10.6)

„ Cách nhận biết tất cả các đối tượng SQL Server đang có hiệu lực trên mạng (mục

10.7)

„ Đọc file Excel với ADO.NET (mục 10.8)

„ Cách sử dụng Data Form Wizard (mục 10.9) và Crystal Report Wizard (mục 10.10)

# Những đề mục trong chương này sử dụng cơ sở dữ liệu mẫu Northwind (do

Microsoft cấp) để làm rõ những kỹ thuật được thảo luận

V Bạn cần mở một kết nối đến một cơ sở dữ liệu

# Tạo một đối tượng kết nối phù hợp với kiểu cơ sở dữ liệu mà bạn cần kết nối; tất cả các đối tượng kết nối đều hiện thực giao diện System.Data.IDbConnection Cấu hình đối tượng kết nối bằng cách thiết lập thuộc tính ConnectionString của nó Mở kết nối bằng cách gọi phương thức Open của đối tượng kết nối

Bước đầu tiên trong việc truy xuất cơ sở dữ liệu là mở một một kết nối đến cơ sở dữ liệu

Giao diện IDbConnection mô tả một kết nối cơ sở dữ liệu, và mỗi data-provider chứa một

hiện thực duy nhất Dưới đây là danh sách các hiện thực IDbConnection cho năm data-provider chuẩn:

Trang 3

System.Data.Odbc.OdbcConnection

System.Data.OleDb.OleDbConnection

System.Data.OracleClient.OracleConnection

System.Data.SqlServerCe.SqlCeConnection

System.Data.SqlClient.SqlConnection

Bạn cấu hình một đối tượng kết nối bằng một chuỗi kết nối Chuỗi kết nối là một tập các cặp giá trị tên được phân cách bằng dấu chấm phẩy Bạn có thể cung cấp một chuỗi kết nối làm đối số trong phương thức khởi dựng hoặc bằng cách thiết lập thuộc tính ConnectionString của đối tượng kết nối trước khi mở kết nối Mỗi hiện thực lớp kết nối yêu cầu bạn cung cấp những thông tin khác nhau trong chuỗi kết nối Bạn hãy tham khảo tài liệu về thuộc tính ConnectionString đối với mỗi hiện thực để biết được những giá trị

mà bạn có thể chỉ định Dưới đây là một số thiết lập:

• Tên server cơ sở dữ liệu đích

• Tên cơ sở dữ liệu cần mở vào lúc đầu

• Giá trị timeout của kết nối

• Cơ chế connection-pooling (xem mục 10.2)

• Cơ chế xác thực dùng khi kết nối đến các cơ sở dữ liệu được bảo mật, bao gồm việc cung cấp username và password

Một khi đã được cấu hình, gọi phương thức Open của đối tượng kết nối để mở kết nối đến cơ sở dữ liệu Kế đó, bạn có thể sử dụng đối tượng kết nối để thực thi những câu lệnh dựa vào data-source (sẽ được thảo luận trong mục 10.3) Các thuộc tính của đối tượng kết nối cũng cho phép bạn lấy thông tin về trạng thái của một kết nối và những thiết lập được

sử dụng để mở kết nối Khi đã hoàn tất một kết nối, bạn nên gọi phương thức Close để giải phóng các tài nguyên hệ thống và kết nối cơ sở dữ liệu nằm dưới IDbConnection được thừa kế từ System.IDisposable, nghĩa là mỗi lớp kết nối sẽ hiện thực phương thức Dispose Phương thức này sẽ tự động gọi Close, cho nên lệnh using là một cách rất rõ ràng và hiệu quả khi sử dụng đối tượng kết nối trong mã lệnh

Để đạt được hiệu năng tối ưu trong việc truy cập dữ liệu thì phải mở kết nối cơ sở dữ liệu càng chậm càng tốt, và khi đã hoàn tất thì ngắt kết nối càng sớm càng tốt Việc này bảo đảm rằng, bạn không truy xuất tới kết nối cơ sở dữ liệu trong một thời gian dài và mã lệnh có cơ hội cao nhất để giữ lấy kết nối Điều này đặc biệt quan trọng nếu bạn đang sử dụng connection-pooling

Đoạn mã dưới đây trình bày cách sử dụng lớp SqlConnection để mở một kết nối đến SQL Server đang chạy trên máy cục bộ có sử dụng Integrated Windows Security (bảo mật tích hợp với Windows) Để truy xuất đến một máy từ xa, chỉ cần thay đổi data-source từ

localhost thành tên của đối tượng cơ sở dữ liệu

// Tạo đối tượng SqlConnection rỗng

Trang 4

using (SqlConnection con = new SqlConnection()) {

// Cấu hình chuỗi kết nối của đối tượng SqlConnection

con.ConnectionString =

"Data Source = localhost;"+ // Đối tượng SQL Server cục bộ

"Database = Northwind;" + // Cơ sở dữ liệu mẫu Northwind

"Integrated Security=SSPI"; // Integrated Windows Security

// Mở kết nối cơ sở dữ liệu

con.Open();

// Hiển thị thông tin về kết nối

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

Console.WriteLine("SqlConnection Information:");

Console.WriteLine(" Connection State = " + con.State);

Console.WriteLine(" Connection String = " + con.ConnectionString);

Console.WriteLine(" Database Source = " + con.DataSource);

Console.WriteLine(" Database = " + con.Database);

Console.WriteLine(" Server Version = " + con.ServerVersion);

Console.WriteLine(" Workstation Id = " + con.WorkstationId);

Console.WriteLine(" Timeout = " + con.ConnectionTimeout);

Console.WriteLine(" Packet Size = " + con.PacketSize);

} else {

Console.WriteLine("SqlConnection failed to open.");

Console.WriteLine(" Connection State = " + con.State);

}

// Cuối khối using, Dispose sẽ gọi Close

}

Đoạn mã dưới đây trình bày một chuỗi kết nối dùng để mở một kết nối đến cơ sở dữ liệu

ở trên (nếu bạn đang sử dụng OLE DB Data Provider để thực hiện kết nối):

// Tạo một đối tượng OleDbConnection rỗng

using (OleDbConnection con = new OleDbConnection()) {

// Cấu hình chuỗi kết nối của đối tượng OleDbConnection

con.ConnectionString =

"Provider = SQLOLEDB;" + // OLE DB Provider for SQL Server

"Data Source = localhost;" + // Đối tượng SQL Server cục bộ

"Initial Catalog = Northwind;" + // Cơ sở dữ liệu mẫu Northwind

"Integrated Security=SSPI"; // Integrated Windows Security

Trang 5

// Mở kết nối cơ sở dữ liệu

con.Open();

§

}

V Bạn muốn duy trì một pool chứa các kết nối đang mở để cải thiện hiệu năng và tính quy mô cho một hệ thống lớn

# Cấu hình pool bằng cách sử dụng các thiết lập trong chuỗi kết nối của đối tượng kết nối

Connection-pooling làm giảm đáng kể tổng phí liên hợp với việc tạo và hủy kết nối cơ sở

dữ liệu Connection-pooling cũng cải thiện tính quy mô của các giải pháp bằng cách giảm

số lượng kết nối đồng thời mà một cơ sở dữ liệu phải duy trì—đa số thường “ngồi không” suốt một phần đáng kể thuộc thời gian sống của chúng Với connection-pooling, thay vì tạo và mở một đối tượng kết nối mới mỗi khi cần, bạn có thể lấy kết nối đã mở từ pool Khi bạn đã hoàn tất việc sử dụng kết nối, thay vì đóng nó, bạn trả nó về cho pool và cho phép đoạn mã khác sử dụng nó

Theo mặc định, SQL Server và Oracle Data Provider cung cấp chức năng

connection-pooling Một pool sẽ hiện diện đối với mỗi chuỗi kết nối do bạn chỉ định khi mở một kết nối mới Mỗi khi bạn mở một kết nối mới với chuỗi kết nối đã được sử dụng qua, nó sẽ được lấy từ pool hiện có Chỉ khi bạn chỉ định một chuỗi kết nối khác thì data-provider mới tạo một pool mới Bạn có thể điều khiển các đặc tính của pool bằng cách sử dụng các thiết lập trong chuỗi kết nối được mô tả trong bảng 10.2

# Một khi đã được tạo, pool sẽ tồn tại cho đến khi tiến trình kết thúc

Bảng 10.2 Các thiết lập trong chuỗi kết nối dùng để điều khiển Connection Pooling

Trang 6

Connection

Lifetime

Chỉ định thời gian tối đa (tính bằng giây) mà một kết nối được phép sống trong pool trước khi nó bị đóng “Tuổi”

của một kết nối được kiểm tra chỉ khi kết nối được trả về cho pool Thiết lập này cần thiết trong việc thu nhỏ kích thước pool nếu pool không được sử dụng nhiều và cũng bảo đảm tính cân bằng tải được thực hiện tối ưu trong môi trường cơ sở dữ liệu gom tụ Giá trị mặc định là 0, có nghĩa là kết nối tồn tại trong thời gian sống của tiến trình hiện thời

Connection

Reset

Chỉ được SQL Server Data Provider hỗ trợ Chỉ định kết

nối có được reset hay không khi chúng được lấy từ pool

Giá trị True bảo đảm trạng thái của kết nối được reset nhưng cần phải thông báo cho cơ sở dữ liệu Giá trị mặc định là True

Pooling Thiết lập là False để có được kết nối không lấy từ pool Giá trị mặc định là True

Max Pool

Size

Chỉ định số lượng kết nối tối đa cần có trong pool Các kết nối được tạo và thêm vào pool khi được yêu cầu cho đến khi đạt đến con số này Nếu một yêu cầu kết nối được thực hiện nhưng không còn kết nối trống thì lời gọi sẽ block cho đến khi có một kết nối có hiệu lực Giá trị mặc định là 100

Min Pool

Size

Chỉ định số lượng kết nối tối thiểu cần có trong pool Lúc tạo pool thì số kết nối này được tạo và thêm vào pool

Trong quá trình duy trì định kỳ hoặc khi một kết nối được yêu cầu, các kết nối sẽ được thêm vào pool để bảo đảm số lượng kết nối tối thiểu có hiệu lực Giá trị mặc định là 0

Đoạn mã dưới đây mô tả cấu hình của một pool: chứa tối thiểu 5 kết nối và tối đa 15 kết nối, kết nối sẽ hết hiệu lực sau 10 phút (600 giây) và được reset mỗi khi một kết nối được lấy từ pool

// Thu lấy pooled connection

using (SqlConnection con = new SqlConnection()) {

// Cấu hình chuỗi kết nối của đối tượng SqlConnection

con.ConnectionString =

Trang 7

"Data Source = localhost;" + // Đối tượng SQL Server cục bộ

"Database = Northwind;" + // Cơ sở dữ liệu mẫu Northwind

"Integrated Security = SSPI;" + // Integrated Windows Security

"Min Pool Size = 5;" + // Kích thước tối thiểu của pool

"Max Pool Size = 15;" + // Kích thước tối đa của pool

"Connection Reset = True;" + // Reset kết nối mỗi khi sử dụng

"Connection Lifetime = 600"; // Thời gian sống tối đa

// Mở kết nối cơ sở dữ liệu

con.Open();

// Truy xuất cơ sở dữ liệu

§

// Cuối khối using, Dispose sẽ gọi Close,

// trả kết nối về cho pool để tái sử dụng

}

Đoạn mã dưới đây mô tả cách sử dụng thiết lập Pooling để có được một đối tượng kết nối không phải lấy từ pool Điều này cần thiết khi ứng dụng của bạn sử dụng một kết nối đơn

"sống lâu"

// Thu lấy non-pooled connection

using (SqlConnection con = new SqlConnection()) {

// Cấu hình chuỗi kết nối của đối tượng SqlConnection

con.ConnectionString =

"Data Source = localhost;" + // Đối tượng SQL Server cục bộ

"Database = Northwind;" + // Cơ sở dữ liệu mẫu Northwind

"Integrated Security = SSPI;" + // Integrated Windows Security

"Pooling = False"; // Chỉ định non-pooled connection

// Mở kết nối cơ sở dữ liệu

con.Open();

// Truy xuất cơ sở dữ liệu

§

// Cuối khối using, Dispose sẽ gọi Close,

// đóng non-pooled connection

}

Trang 8

ODBC và OLE DB Data Provider cũng hỗ trợ connection-pooling, nhưng chúng không hiện thực connection-pooling bên trong các lớp NET, nên bạn không thể cấu hình pool theo cách như SQL Server hay Oracle Data Provider Connection-pooling trong ODBC được quản lý bởi ODBC Driver Manager và được cấu hình bằng công cụ ODBC Data Source Administrator trong Control Panel Connection-pooling trong OLE DB được quản

lý bởi hiện thực OLE DB nguyên sinh; bạn có thể làm mất hiệu lực pooling bằng cách thêm thiết lập “OLE DB Services=-4;” vào chuỗi kết nối SQL Server CE Data Provider không hỗ trợ connection-pooling, vì tại một thời điểm SQL Server CE chỉ hỗ trợ một kết

nối

Ngày đăng: 26/01/2014, 04:20

TỪ KHÓA LIÊN QUAN