CÁCH KẾT NỐI CSDL MYSQL TỪ CHƯƠNG TRÌNH VC# TRONG
MÔI TRƯỜNG VISUAL STUDIO 2005
21/08/2007 09:16 AM
Bạn có thể lập trình VC# (hay VJ#, VB .Net) truy xuất database
MySQL bằng cách dùng 1 trong 4 giao tiếp lập trình sau:
ODBC .Net, MySQL Provider, OLEDB .Net, thư viện lập trình
API.
1. ODBC .Net: đây là giao tiếp chuẩn hóa nên có tính tổng quát hóa
cao nhất, bạn truy xuất database của MySQL và của các hệ quản trị
CSDL khác thông qua các đối tượng chuẩn của Microsoft (trong
namespace System.Data.Odbc).
2. MySQL Provider đặc dụng, thí dụ như MySQLDirect, phương pháp
này cũng giống như phương pháp 1, chỉ có điều là bạn phải cài và sử
dụng các đối tượng đặc dụng của 1 hãng khác chứ không dùng các
đối tượng ODBC chuẩn của Microsoft.
3. OLEDB .Net, phương pháp này rất giống như phương pháp 1, chỉ
khác là thay vì dùng các đối tượng ODBC .Net, bạn sẽ dùng các đối
tượng OLEDB .Net. Mặc dù các đối tượng OLEDB .Net cũng do
Microsoft cung cấp, nhưng Microsoft khuyến cáo họ sẽ không hỗ trợ
các đối tượng OLEDB .Net nữa.
4. Thư viện lập trình API đặc dụng bằng C++, thí dụ như thư viện
mysqlclient. Đây là phương pháp có tính tổng quát hóa thấp nhất, vì
đoạn lệnh truy xuất database trong ứng dụng chứa rất nhiều lệnh gọi
hàm API của thư viện đặc dụng.
Tóm lại trong 4 phương pháp trên, chỉ có phương pháp 1 là tổng quát
nhất, do đó bạn nên lập trình dùng phương pháp này để truy xuất
database MySQL. Thí dụ hàm Testdb() sau đây cho phép tạo 1 table
mới trên database 'test' do MySQL server chạy trên máy 'NgocDV'
quản lý, hàm này dùng các đối tượng ODBC .Net sau:
OdbcConnection, OdbcCommand, OdbcDataReader.
using Console = System.Console;
using System.Data.Odbc;
private void Testdb() {
try{
//Connection string dùng DSN và MyODBC 3.51
string MyConString = "DSN=MySQL";
//hoặc Connection string dùng trực tiếp Provider MyODBC
3.51
/*string MyConString = "DRIVER={MySQL ODBC 3.51
Driver};" +
"SERVER=NgocDV;" +
"DATABASE=test;" +
"UID=zensoft;" +
"PASSWORD=nssh;" +
"OPTION=3";
*/
//tạo connection tới database
OdbcConnection MyConnection = new
OdbcConnection(MyConString);
MyConnection.Open();
//xóa table testdb nếu đã có rồi
OdbcCommand MyCommand = new
OdbcCommand("DROP TABLE IF EXISTS testdb",MyConnection);
MyCommand.ExecuteNonQuery();
//Tạo lại table testdb có 3 field
MyCommand.CommandText = "CREATE TABLE
testdb(hoten varchar(40),namsinh int, diachi varchar(50))";
MyCommand.ExecuteNonQuery();
//Thử thêm 1 record dữ liệu
MyCommand.CommandText = "INSERT INTO testdb
VALUES('Dao Van Ngoc',1983,'An Dong, An Duong, HP')";
MyCommand.ExecuteNonQuery();
//Thử thêm 1 record dữ liệu nữa
MyCommand.CommandText = "INSERT INTO testdb
VALUES('Duong Thu Son',1983,'Trai Chuoi, Hong bang, Hp')";
MyCommand.ExecuteNonQuery();
//Thử thêm 1 record dữ liệu nữa
MyCommand.CommandText = "INSERT INTO testdb
VALUES('Pham Tuan Hai',1985,'294 Tran Nguyen Han, HP')";
MyCommand.ExecuteNonQuery();
//Thử thêm 1 record dữ liệu nữa
MyCommand.CommandText = "INSERT INTO testdb
VALUES('Nguyen Ha Son',1985,'10/10 Lạch tray, HP')";
MyCommand.ExecuteNonQuery();
//Hiệu chỉnh thử 1 field của 1 số record thỏa điều kiện
MyCommand.CommandText = "UPDATE testdb SET
namsinh=1984 WHERE namsinh=1985";
MyCommand.ExecuteNonQuery();
//Đếm số record hiện có
MyCommand.CommandText = "SELECT COUNT(*) as
TRows FROM testdb";
Console.WriteLine("Total Rows: " +
MyCommand.ExecuteScalar());
//Duyệt đọc và hiển thị các record trong table
MyCommand.CommandText = "SELECT * FROM testdb";
OdbcDataReader MyDataReader;
MyDataReader = MyCommand.ExecuteReader();
while (MyDataReader.Read()) {
Console.WriteLine("Data: " +
MyDataReader.GetString(0) + ", " +
MyDataReader.GetInt32(1) + ", " +
MyDataReader.GetString(2)); //BIGINTs not supported
by MyODBC
}
//Đóng các đối tượng đã dùng
MyDataReader.Close();
MyConnection.Close();
}
catch (OdbcException MyOdbcException) {//Catch tất cả lỗi
exception
for (int i=0; i < MyOdbcException.Errors.Count; i++) {
Console.Write("ERROR #" + i + "\n" + "Message: " +
MyOdbcException.Errors[i].Message + "\n" + "Native: " +
MyOdbcException.Errors[i].NativeError.ToString() + "\n" +
"Source: " + MyOdbcException.Errors[i].Source + "\n" +
"SQL: " + MyOdbcException.Errors[i].SQLState + "\n");
}
}
}
Một số lưu ý khi lập trình dùng ODBC .Net:
1. Cài đặt MySQL Server trên máy nào đó và lưu ý tên (địa chỉ) của
máy đó. Nhớ cấu hình cho MySQL Server sử dụng ít nhất protocol
TCP/IP để giao tiếp với các máy client.
2. Download "MySQL ODBC 3.51 Driver" và cài đặt nó trên máy
client (máy sẽ chạy ứng dụng do bạn viết). Bạn có thể download
"MySQL ODBC 3.51 Driver" ở địa chỉ
/>3. Nếu lập trình dùng DSN trong connection string để nối kết với
MySQL Server, bạn phải tạo trước DSN kết hợp với database cần
truy xuất. Bạn hãy chạy Control Panel.Administrative Tools.Data
Source (ODBC) để tạo DSN kết hợp với database cần truy xuất.
4. Nếu lập trình dùng DSN trong connection string thì đoạn lệnh mà
bạn viết hoàn toàn độc lập với công nghệ quản lý database, vị trí vật
lý database. Cụ thể hàm Testdb() mà chúng tôi viết ở trên hoàn toàn
độc lập với công nghệ quản lý database và vị trí vật lý của database,
nó có thể truy xuất bất kỳ database nào của hệ quản trị database
nào, bạn chỉ cần vào tool Data Source (ODBC) của Windows và hiệu
chỉnh lại các thông số liên quan đến database cần truy xuất là đủ.