
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ở ị ỉ
http://dev.mysql.com/downloads/connector/odbc/3.51.html.
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à đ .ỉ ạ ố ế ầ ấ ủ

