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

Tài liệu Tìm hiểu C# và ứng dụng của C# p 23 pptx

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 (363.74 KB, 6 trang )

Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang
148

//Đẩy dữ liệu trog sda vào ds bằng hàm Fill();
sda.Fill(ds);
14.5 Trình cung cấp dữ liệu (.NET Data Providers)
.NET Framework hỗ trợ hai trình cung cấp dữ liệu là SQL Server .NET Data
Provider
( dành cho phiên bản SQL Server 7.0 của Microsoft trở lên ) và
OLE DB
.NET Data Provider ( dành cho các hệ quản trị cơ sở dữ liệu khác ) để truy cập vào
cơ sở dữ liệu.
Hình 14-3 So sánh SQL Server .NET Data Provider và the OLE DB .NET Data
Provider

SQL Server .NET Data Provider
có các đặc điểm :
• Dùng nghi thức riêng để truy cập cơ sở dữ liệu

Truy xuất dữ liệu sẽ nhanh hơn và hiệu quả hơn do không phải thông qua lớp
OLE DB Provider hay ODBC
• Chỉ được dùng với hệ quản trị cơ sở dữ liệu SQL Server 7.0 trở lên.

Được Mircrosoft hỗ trợ khá hoàn chỉnh.
OLE DB .NET Data Provider có các đặc điểm :
• Phải thông qua 2 lớp vì thế sẽ chậm hơn

Thực hiện được các dịch vụ “Connection Pool”
• Có thể truy cập vào mọi Datasource có hỗ trợ OLE DB Provider thích hợp
14.6 Khởi sự với ADO.NET
Để có thể hiểu rõ được ADO.NET, ngoài lý thuyết ra, chúng ta sẽ khảo sát chi tiết


về cách chúng hoạt động ra bằng mã lệnh cụ thể.
Ví dụ Windows Form dưới đây sẽ dùng một ListBox để lấy dữ liệu từ bảng
Custommers trong cơ sở dữ liệu NorthWind.
Đầu tiên ta sẽ tạo ra đối tượng DataAdapter :
SqlDataAdapter DataAdapter = new SqlDataAdapter(
commandString, connectionString);
Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang
149
Hàm khởi tạo của đối tượng này gồm hai tham số commandString và
connectionString. commandString là chuỗi chứa câu lệnh truy vấn trên dữ liệu mà ta
muốn nhận về :
string commandString =
"Select CompanyName, ContactName from Customers";
Biến connectString chứa các thông số để kết nối đến cơ sở dữ liệu. Ứng dụng của ta
dùng hệ quản trị cơ sở dữ liệu SQL Server, vì thế để đơn giản ta sẽ để đối số
password là trống, uid là sa, máy chủ server là localhost và tên cơ sở dữ liệu là
NorthWind :
string connectionString =
"server=localhost; uid=sa; pwd=; database=northwind";
Với đối tượng DataAdapter được tạo ở trên, ta sẽ tạo ra một đối tượng DataSet mới
và đẩy dữ liệu vào nó bằng phương thức Fill() của đối tương DataAdapter.
DataSet dataSet = new DataSet( );
DataAdapter.FillDataSet(dataSet,"Customers");
Đối tượng DataSet chứa một tập các DataTable, nhưng ở đây ta chỉ cần lấy dữ liệu
của bảng đầu tiên là “Customers” :
DataTable dataTable = dataSet.Tables[0];
Ta sẽ duyệt qua từng dòng của bảng bằng vòng lặp foreach để lấy về từng DataRow
một, sau đó sẽ truy cập đến trường cần lấy dữ liệu thông qua tên cột, rồi thêm vào
ListBox.
foreach (DataRow dataRow in dataTable.Rows)

{
lbCustomers.Items.Add( dataRow["CompanyName"] +
" (" + dataRow["ContactName"] + ")" );
}
Sau đây là đoạn mã đầy đủ của ứng dụng :
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

namespace ProgrammingCSharpWinForm
{
public class ADOForm1 : System.Windows.Forms.Form
{
private System.ComponentModel.Container components;
private System.Windows.Forms.ListBox lbCustomers;
public ADOForm1( )
{
InitializeComponent( );

// kết nối đến máy chủ, cơ sở dữ liệu northwind
string connectionString =
"server=localhost; uid=sa; pwd=; database=northwind";

Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang
150
// lấy các dòng dữ liệu từ bảng Customers

string commandString =
"Select CompanyName, ContactName from Customers";

// tạo ra đối tượng DataAdapter và DataSet
SqlDataAdapter DataAdapter =
new SqlDataAdapter(commandString, connectionString);
DataSet DataSet = new DataSet( );

// đẩy dữ liệu vào DataSet
DataAdapter.Fill(DataSet,"Customers");

// lấy về một bảng dữ liệu
DataTable dataTable = DataSet.Tables[0];

// duyệt từng dòng để lấy dữ liệu thêm vào ListBox
foreach (DataRow dataRow in dataTable.Rows)
{
lbCustomers.Items.Add(dataRow["CompanyName"] +
" (" + dataRow["ContactName"] + ")" );
}
}

public override void Dispose( )
{
base.Dispose( );
components.Dispose( );
}

private void InitializeComponent( )
{

this.components = new System.ComponentModel.Container();
this.lbCustomers = new System.Windows.Forms.ListBox();
lbCustomers.Location = new System.Drawing.Point(48, 24);
lbCustomers.Size = new System.Drawing.Size(368, 160);
lbCustomers.TabIndex = 0;
this.Text = "ADOFrm1";
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(464, 273);
this.Controls.Add(this.lbCustomers);
}

public static void Main(string[] args)
{
Application.Run(new ADOForm1( ));
}
}
}
Chỉ với một số dòng mã ta đã có thể lấy dữ liệu và hiện thị trong hộp ListBox :
Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang
151
Hình 14-4 Kết xuất của ví dụ trên.

Để hoàn chỉnh giao tác trên, ta cần thực hiện tám dòng mã chính :
• Tạo ra chuỗi kết nối vào cơ sở dữ liệu
string connectionString =
"server=myServer; uid=sa; pwd=; database=northwind";
• Tạo câu lênh truy vấn chọn dữ liệu
string commandString =
"Select CompanyName, ContactName from Customers";


Tạo đối tượng DataAdapter và chuyển cho nó chuỗi truy vấn và kết nối
SqlDataAdapter DataAdapter = new SqlDataAdapter(
commandString, connectionString);

Tạo đối tượng DataSet mới
DataSet dataSet = new DataSet( );

Đẩy bảng dữ liệu Customers lấy từ DataAdapter vào dataSet
DataAdapter.Fill(dataSet,"Customers");
• Trích đối tượng DataTable từ dataSet trên
DataTable dataTable = DataSet.Tables[0];
• Đẩy dữ liệu trong bảng dataTable vào ListBox
foreach (DataRow dataRow in dataTable.Rows)
{
lbCustomers.Items.Add(dataRow["CompanyName"] +
" (" + dataRow["ContactName"] + ")" );
}
14.7 Sử dụng trình cung cấp dữ liệu được quản lý
Ở ví dụ trên chúng ta đã khảo sát qua cách truy cập dữ liệu thông qua trình cung cấp
dữ liệu
SQL Server .NET Data Provider
. Trong phần này chúng ta sẽ tiếp tục
khảo sát sang trình cung cấp dữ liệu
OLE DB .NET Data Provider
, với trình cung
cấp dữ liệu này ta có thể kết nối đến bất kỳ hệ quản trị cơ sở dữ liệu nào có hỗ trợ
trình cung cấp dữ liệu OLE DB Providers, cụ thể là Microsoft Access.
So với ứng dụng trên, ta chỉ cần thay đổi một vào dòng mã là có thể hoạt động
được. Đầu tiên là chuỗi kết nối :
string connectionString = "provider=Microsoft.JET.OLEDB.4.0; "

+ "data source = c:\\northwind.mdb";
Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang
152
Chuỗi trên sẽ kết nối đến cơ sở dữ liệu northwind trên ổ đĩa C.
Kế tiếp ta thay đổi đối tượng DataAdapter từ SqlDataAdapter sang
OleDbDataAdapter
OleDbDataAdapter DataAdapter = new OleDbDataAdapter(
commandString, connectionString);
Chúng ta phải đảm bảo là namespace OleDb được thêm vào ứng dụng :
using System.Data.OleDb;
Phần mã còn lại thì tương tự như ứng dụng trên, sau đây sẽ trích ra một đoạn mã
chính phục vụ cho việc kết nối theo cách này :
public ADOForm1( )
{
InitializeComponent( );

// chuỗi kết nối đến cơ sở dữ liệu
string connectionString = "provider=Microsoft.JET.OLEDB.4.0;"
+ "data source = c:\\nwind.mdb";

// chuỗi truy vấn dữ liệu
string commandString =
"Select CompanyName, ContactName from Customers";

// tạo đối tượng OleDbDataAdapter và DataSet mới
OleDbDataAdapter DataAdapter = new OleDbDataAdapter(
commandString, connectionString);
DataSet dataSet = new DataSet( );

// đẩy dữ liệu vào dataSet

DataAdapter.Fill(DataSet,"Customers");

// lây về bảng dữ liệu Customers
DataTable dataTable = DataSet.Tables[0];

// duyệt qua từng dòng dữ liệu
foreach (DataRow dataRow in dataTable.Rows)
{
lbCustomers.Items.Add(dataRow["CompanyName"] +
" (" + dataRow["ContactName"] + ")" );
}
}
14.8 Làm việc với các điều khiển kết buộc dữ liệu
ADO.NET hỗ trợ khá hoàn chỉnh cho các điều khiển kết buộc dữ liệu (Data-
Bound), các điều khiển này sẽ nhận vào một DataSet, sau khi gọi hàm DataBind()
thì dữ liệu sẽ tự động được hiển thị lên điều khiển.
14.8.1 Đẩy dữ liệu vào điều khiển lưới DataGrid
Ví dụ sau sẽ dùng điều khiển lưới DataGrid để thực hiện kết buộc dữ liệu, điều
khiển lưới này được hỗ trợ cho cả ứng dụng Windows Forms và WebForms.
Truy cập dữ liệu với ADO.NET Gvhd: Nguyễn Tấn Trần Minh Khang
152
Chuỗi trên sẽ kết nối đến cơ sở dữ liệu northwind trên ổ đĩa C.
Kế tiếp ta thay đổi đối tượng DataAdapter từ SqlDataAdapter sang
OleDbDataAdapter
OleDbDataAdapter DataAdapter = new OleDbDataAdapter(
commandString, connectionString);
Chúng ta phải đảm bảo là namespace OleDb được thêm vào ứng dụng :
using System.Data.OleDb;
Phần mã còn lại thì tương tự như ứng dụng trên, sau đây sẽ trích ra một đoạn mã
chính phục vụ cho việc kết nối theo cách này :

public ADOForm1( )
{
InitializeComponent( );

// chuỗi kết nối đến cơ sở dữ liệu
string connectionString = "provider=Microsoft.JET.OLEDB.4.0;"
+ "data source = c:\\nwind.mdb";

// chuỗi truy vấn dữ liệu
string commandString =
"Select CompanyName, ContactName from Customers";

// tạo đối tượng OleDbDataAdapter và DataSet mới
OleDbDataAdapter DataAdapter = new OleDbDataAdapter(
commandString, connectionString);
DataSet dataSet = new DataSet( );

// đẩy dữ liệu vào dataSet
DataAdapter.Fill(DataSet,"Customers");

// lây về bảng dữ liệu Customers
DataTable dataTable = DataSet.Tables[0];

// duyệt qua từng dòng dữ liệu
foreach (DataRow dataRow in dataTable.Rows)
{
lbCustomers.Items.Add(dataRow["CompanyName"] +
" (" + dataRow["ContactName"] + ")" );
}
}

×