CÁCH K T N I CSDL MYSQL T CH NG TRÌNH VC# TRONG ƯƠ
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 ư
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 ic thông s liên quan đ n database c n truy xu t là đ . ế