Hiển thị các bài đăng có nhãn Lập trình hướng đối tượng. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Lập trình hướng đối tượng. Hiển thị tất cả bài đăng
Cách tạo mảng động trong C#

Cách tạo mảng động trong C#

Mảng động là khai báo một mảng phần tử có kích thước động. Mảng động là rất quan trọng, tối ưu trong việc lập trình, nó cấp phát bộ nhớ lưu trữ động. Vậy các khai báo và sử dụng mảng động trong C# như thế nào? Sau đây sẽ giới thiệu về mảng động trong C#.

Từ khóa khai báo List<Kiểu_dữ_liệu> mang_dong= new ListKiểu_dữ_liệu >();

-          Kiểu_dữ_liệu: Là kiểu dữ liệu có thể là String, double, int,...hoặc là kiểu dữ liệu do người dùng định nghĩa.
Các thuộc tính trong mảng động cho ta thao tác:
-          Thêm phần tử vào mảng dùng thuộc tính Add, phần từ thêm sẽ vào vị trí cuối mảng
-          Đếm số phần tử có trong mảng dùng thuộc tính Count.
-          Xóa phần tử trong mảng dùng thuộc tính RemoveRange, RemoveAll, RemoveAt
-          Nhiều các thuộc tính khác.
Ví dụ 1:
private Void vidu1
{
List<string> mang_xau = new List<string>();
for (int i = 0; i < 5; i++)
   {
mang_xau.Add(i.ToString());//Thêm phần tử vào mảng
}
MessageBox.Show(mang_xau.Count.ToString());//Hiển thị số phần tử trong mảng
MessageBox.Show(mang_xau[2]);//Hiển thị giá trị phần tử thứ 3
mang_xau.RemoveRange(0, mang_xau.Count); //Xóa phần tử từ vị trí đầu đến hết
}
Kết quả hiển thị thông báo lần lượt là: 5, 3

Ví dụ 2:
//Định nghĩa kiểu dữ liệu
public struct diem_daucuoi
{
public string danhtu_chung, danhtu_rieng;
public int giatri;
}
private Void vidu2
{
List<diem_daucuoi> mang_dinhnghia = new List<diem_daucuoi>();
for (int i = 0; i < 5; i++)
      {
            diem_daucuoi Diem = new diem_daucuoi();
            Diem.danhtu_chung = "chung" + i.ToString();
            Diem.danhtu_rieng = "rieng" + i.ToString();
Diem. giatri = i+1;
            //Add điểm
            mang_dinhnghia.Add(Diem);
      }
            //Sắp xếp mang_dinhnghia giảm dần theo giatri
for (int i = 0; i < mang_dinhnghia.Count-1; i++)
      {
for (int j = i+1; j < mang_dinhnghia.Count; j++)
            {
                                    if(mang_dinhnghia[j].giatri> mang_dinhnghia[i].giatri)
                                    {
                                                diem_daucuoi tg = mang_dinhnghia[j];
                                                mang_dinhnghia[j]= mang_dinhnghia[i];
                                                mang_dinhnghia[i]= tg;
                                    }
                        }
            }
            String xau="";
for (int i = 0; i < mang_dinhnghia.Count; i++)
            {
                        xau+= mang_dinhnghia[i].giatri.ToString()+"\n";
            }
MessageBox.Show(xau);//Hiển thị xau
mang_xau.RemoveRange(0, mang_xau.Count); //Xóa phần tử từ vị trí đầu đến hết
}
Kết quả hiển thị thông báo là:
      5
4
3
2
1
Code mã hóa MD5 trong C#

Code mã hóa MD5 trong C#

Khi bạn viết một ứng dụng mà đòi hỏi tính bảo mật, không muốn người khác có thể đọc thông tin bạn lưu trữ. Như có liên quan đến cơ sở dữ liệu, hoặc bất cứ thông tin nào đó mà không muốn người dùng đọc dịch được thì ta sẽ sử dụng bộ mã hóa. Trong C# hỗ trợ việc mã hóa MD5 rất dễ dàng. MD5 là một dạng mã hóa rất cao tại thời điểm hiện tại, nó đã được kiểm trứng khả năng dịch ngược lại là rất khó.

Trong C# có thư viện hỗ trợ mã hóa MD5 đó là thư viện System.Security.Cryptography. Khi bạn viết ứng dụng khai báo thư viện này và sử dụng hàm mã hóa như sau:
public string GetMD5(string chuoi)
        {
            string str_md5 = "";
            byte[] mang = System.Text.Encoding.UTF8.GetBytes(chuoi);

            MD5CryptoServiceProvider my_md5 = new MD5CryptoServiceProvider();
            mang = my_md5.ComputeHash(mang);

            foreach (byte b in mang)
            {
                str_md5 += b.ToString("x2");//Nếu là "X2" thì kết quả sẽ tự chuyển sang ký tự in Hoa
            }

            return str_md5;
        }

Kết quả trả về là đã mã hóa. Khi bạn mã hóa bất kỳ thông tin nào hãy dùng hàm này.
Tương tác với System Registry trong C#

Tương tác với System Registry trong C#

Nếu là dân lập trình COM, chắc hẳn bạn không thể tránh khỏi sự khốn khổ khi lập trình với Registry của Windows . Còn nếu bạn sống chung với VS.NET rất ư là thưa thớt, .NET Framework đã giảm sự quan trọng của Registry đối với ứng dụng, vì assembly đã trở...
Nếu là dân lập trình COM, chắc hẳn bạn không thể tránh khỏi sự khốn khổ khi lập trình với Registry của Windows. Còn nếu bạn sống chung với VS.NET rất ư là thưa thớt, .NET Framework đã giảm sự quan trọng của Registry đối với ứng dụng, vì assembly đã trở thành “tự cung tự cấp” do đó assembly không cần thông tin đặc biệt được trữ trên RegistryRegistry giờ đây chỉ nơi tiện lợi để bạn lưu trữ thông tin về sở thích của người sử dụng.
Namespace Microsoft.Win32

Namespace Microsoft.Win32 định nghĩa một vài lớp cho phép đọc/viết registry một cách dễ dàng. Sau đây là các lớp trong namespace này:
-Registry: Một trừu tượng hóa cấp cao về bản thân Registry, với tất cả các lớp được gắn liền
-RegistryKey : Đây là lớp cốt lõi cho phép bạn thêm vào, gỡ bỏ và nhật tu thông tin được trữ trong Registry
-RegistryHive: Đây chỉ là mỗi khuôn tổ ong (hive) trên Registry
Trước khi đi vào việc tương tác với Registry qua C#, bạn cũng nên biết qua chút ít về Registry trong Windows:
Để mở Registry: nhấn menu Start trên thanh taskbar, sau đó chọn Run, ở hộp thoại Run vừa hiện ra, gõ vào regedit.
HKEY_CLASSIES_ROOT (HKCR): chứa những chi tiết về các loại tập tin (.txt,.doc,…) và những ứng dụng nào đó có khả năng mở các tập tin loại nào. Ngoài ra, nó còn chứa những thông tin đăng ký đối với tất cả các cấu kiện COM
HKEY_CURRENT_USER (HKCU): chứa những chi tiết liên quan đến những sở thích của người sử dụng hiện được đăng nhập trên máy tính.
HKEY_LOCAL_MACHINE (HKLM): là một hive đồ sộ chứa những chi tiết của tất cả các phần mềm và phần cứng được cài đặt trên máy. Nó cũng bao gồm HKCR hive: HKCR hiện thật sự không phải là 1 hive độc lập tự thân, nhưng đơn giản là một ánh xạ tiện lợi trên Registry key.
HKEY_USERS (HKUSR): chứa những chi tiết liên quan đến sở thích của tất cả các người sử dụng. Như bạn có thể chờ đợi, nó cũng chứa hive HKCU, đơn giản là 1 ánh xạ lên 1 trong những key trên HKEY_USERS
HKEY_CURRENT_CONFIG
: chứa những chi tiết liên quan đến phần cứng trên máy tính.
Các lớp.NET Registry

Việc truy cập vào Registry trên .NET sẽ thông qua 2 lớp Registry và RegistryKey thuộc namespace Microsoft.Win32. Một thể hiện của lớp Registry Key tượng trưng cho một registry key. Lớp RegistryKey cung cấp những thành viên cốt lõi sau đây cho phép bạn làm việc với một registry key:
-Name: thuộc tính này tìm lại tên của key (read-only)
-SubKeyCount: thuộc tính này tìm lại bộ đếm số lượng subkey
-ValueCount: tìm lại bộ đếm các giá trị trên một key
-Close(): hàm này cho đóng lại key, và ghi lên đĩa cứng nếu nội dung bị thay đổi
-CreateSubKey(): hàm này tạo 1 subkey mới hoặc mở 1 subkey hiện hữu. Chuỗi subkey không phân biệt chữ hoa, chữ thường.
-DeleteSubKey(): hàm này cho gỡ bỏ 1 subkey được chỉ định. Nếu muốn gỡ bỏ những subkey con thì sử dụng đến DeleteSubKeyTree(). Chuỗi subkey không phân biệt chữ hoa, chữ thường
-GetSubKeyNames(): hàm này cho tìm lại mảng chứa tất cả các tên của subkey
-GetValue(): hàm này tìm lại trị được khai báo.
-GetValueNames(): hàm này cho tìm lại 1 bản dãy chuỗi chữ chứa tất cả các tên trị (value name)
-OpenRemoteBaseKey(): hàm này cho mở 1 RegistryKey mới tượng trưng cho key được yêu cầu trên một máy nằm ngoài.
-OpenSubKey(): hàm này cho tìm lại SubKey()
-SetValue(): hàm này cho đặt để 1 trị được chỉ định. Chuỗi subkey không phân biệt hoa thường.
Lớp RegistryKey

Lớp RegistryKey là lớp mà chúng ta sẽ dùng để làm việc với registry. Bài viết này sẽ đi sâu vào lớp này. Đầu tiên, muốn có 1 thể hiện của 1 RegistryKey, tượng trưng cho key HKEY_LOCAL_MACHINE , bạn viết:

[PHP]RegistryKey Hklm = Registry.LocalMachine;[/PHP]


Như bạn đã thấy, đối tượng Hklm đơn giản là đang trỏ tới khóa HKEY_LOCAL_MACHINE (HKLM) trong Registry. Cũng không có gì khó hiểu, chúng ta qua bước nữa nhé. Bây giờ, nếu bạn muốn đọc 1 vài dữ liệu trên HKEY_LOCAL_MACHINE\Software\Microsoft, bạn phải lấy qui chiếu về key như sau:

[PHP]RegistryKey Hklm = Registry.LocalMachine;
RegistryKey HkSoftware = Hklm.OpenSubKey(“Software”);
RegistryKey HkMicrosoft = HkSoftware.OpenSubkey(“Microsoft”); [/PHP]


Hàm hành sự OpenSubKey() là 1 trong những hàm bạn sẽ triệu gọi nếu bạn chờ đợi key hiện hữu. Nếu nó không có, thì nó sẽ trả về một null reference. Còn nếu bạn muốn tạo 1 key mới, bạn sẽ dùng hàm CreateSubKey() (hàm này tự động cho quyền Read-Write):

[PHP]RegistryKey Hklm = Registry.LocalMachine;
RegistryKey HkSoftware = Hklm.OpenSubKey(“Software”);
RegistryKey HkMine = HkSoftware.CreateSubKey(“Phan mem cua toi”);[/PHP]

Như thế là chúng ta đã có có khóa mang tên “Phan mem cua toi” trong HKEY_LOCAL_MACHINE\Software rồi đấy.
Điều thông thường xảy ra là ứng dụng của bạn cần bảo đảm là 1 vài dữ liệu hiện diện trong Registry – nói cách khác là tạo ra những key mang ý nghĩa nếu chúng chưa hiện diện, nhưng không làm gì cả nếu chúng hiện diện. CreateSubkey() đáp ứng đúng nhu cầu này.
Một khi bạn đã có Registry key, bạn muốn đọc hoặc thay đổi, bạn có thể sử dụng hàm SetValue() hoặc GetValue() để đặt thuộc đi lấy dữ liệu trên Key. Thí dụ:

[PHP]RegistryKey HkMine = HkSoftware.CreateSubkey(“Phan mem cua toi”);
HkMine.SetValue(“Ma so dang ky”, “Hello World”);
HkMine.SetValue(“So hieu”, 33);

Đoạn mã trên sẽ đặt key về 2 giá trị: “Ma so dang ky” sẽ mang kiểu dữ liệu REG_SZ, trong khi “So hieu” sẽ mang kiểu dữ liệu REG_DWORD (ở đây giá trị của nó = 33)
RegistryKey.GetValue() hoạt động cũng như vậy, nó được định nghĩa trả về 1 quy chiếu đối tượng, nghĩa là trả về 1 qui chiếu string nếu nó thấy có kiểu dữ liệuREG_SZ và một int nếu phát hiện kiểu dữ liệu REG_DWORD:

[PHP] string StringValue = (string) HkMine.GetValue(“Ma so dang ky”);
int sohieu = (int) HkMine.GetValue(“So hieu”);
[/PHP]
Khi đã thao tác xong với registry, bạn nhớ là phải cho đóng lại
HkMine.Close();

Ví dụ

Bây giờ, chúng ta thực hiện một ứng dụng nho nhỏ, chúng ta thử xây dựng 1 ứng dụng Windows Forms, trong đó có chứa 1 button để save trạng thái của Form chính, trong đó Form chính còn chứa thêm các thuộc tính như màu sắc, font chữ,… Chẳng hạn nhé, chúng ta có 1 chương trình, người dùng mở lên, thao tác “tá lả âm binh” trên đó như thay đổi màu sắc phông chữ, thay đổi màu nền,… sau đó họ thoát ra, và bạn phải làm sao để lúc họ mở lại, những thay đổi của người dùng không bị biến mất. Làm sao đây? Đây là lúc chúng ta sử dụng đến “RegistryKey” vừa quen biết.
Giả sử, chúng ta đã xây dựng Form xong rồi nhé, và có đầy đủ các thuộc tính, hãy thử phá Form này thoải mái.Yeah, ok. Xong! Bây giờ chúng ta dùngRegistry.SetValue() để lưu lại mấy cái phá hoại của người đó.
[PHP] private void FileSave_Cliked(object sender, EventArgs e) // tình huống clicked của button Saved
{
RegistryKey regKey = Registry.CurrentUser;
regKey = regKey.CreateSubkey(“Software\\C#\\UngDung”);
regKey.SetValue(“CurrSize”,currFontSize);
regKey.SetValue(“CurrColor”,currColor.Name);
}


Nếu bây giờ người sử dụng cho màu hiện hành về màu Blue và kích thước Font chữ là 30. Thì những thông tin này sẽ được lưu trongHKEY_CURRENT_USER\Software\C#\UngDung
Vậy là xong phần lưu thông tin, bây giờ giải quyết việc đọc thông tin đã lưu bằng cách dùng hàm GetValue(). Cụ thể như đoạn code dưới đây:
 RegistryKey regKey = Registry.CurrentUser;
regKey = regKey.CreateSubkey(“Software\\C#\\UngDung”);
//đọc vào dữ liệu rồi gán cho biến tình trạng
currFontSize = (int) regKey.GetValue(“CurrSize”,currFontSize);
string c = (string) regKey.GetValue(“CurrColor”,currColor.Name);
currColor = Color.FromName( c );
BackColor = currColor;
Layout manager trong C#

Layout manager trong C#


Bất cứ khi nào người lập trình ngồi xuống thiết kế một giao diện, anh ta sẽ phải đối mặt với một số vấn đề liên quan đến việc thiết kế: yêu cầu thẩm mỹ, khả năng mở rộng, có thể chuyển đổi kích thước và dễ chỉnh sửa... 
Layout managers sẽ giúp bạn giải quyết những vấn đề đó bằng việc thiết lập những kích cỡ, vị trí của các đối tượng table layout (bố cục bảng). Chèn các thành phần mà layout quản lý, tất cả các layout đều có khả năng mở. Trong lập trình Java, chúng ta đã quá quen với những khái niệm về quản lý Layout. Tuy nhiên các lập trình viên khi chuyển từ các ngôn ngữ lập trình khác sang C Sharp, đều cần phải có thời gian làm quen với chúng. Nếu bạn bắt đầu từ nền tảng Java, bạn nên tìm hiểu sự khác nhau giữa cách quản lý Layout trong Java và sự thực thi chúng trong C Sharp. Nếu bạn vẫn chưa quen với cách quản lý Layout thì hãy bắt đầu tìm hiểu từ cơ bản.
1. Layout Manager là gì?
- Là bất kì cái gì có thể quyết định vị trí và kích cỡ của các đối tượng Bố cục bảng và cũng có thể chính là Bố cục bảng. Chúng có thể được sử dụng trong mọi tình huống, tuy nhiên chủ yếu chúng được dùng trong Giao diện đồ họa người dùng (GUI - Graphical User Interfaces). Những ai đã từng biết lập trình đều có thể nhận biết được sự rắc rối của nó. Những năm gần đây người ta đã phát triển một số công cụ hỗ trợ, hầu hết đều được viết bằng ngôn ngữ C++, làm cho việc thiết kế giao diện trở nên dễ dàng hơn. Nhưng cho dù có những công cụ tinh vi như vậy thì Các GUIs vẫn là một vấn đề phức tạp.
2. Layout Manager giữa Java và C Sharp:
- Có 2 điểm khác biệt giữa Layout Manager trong Java và Thực Thi Layout Manager trong C Sharp.
- Thứ Nhất: trong Java, Layout Manager được loại bỏ hoàn toàn trong khu vực GUIs. Hay nói theo cách khác, những thứ duy nhất mà có thể được quản lý bởi Layout Manager trong Java là các thành phần của chúng (Components). Còn Trong C Sharp, Bất cứ cái gì mà thực thi giao diện Bố cục thì đều có thể được quản lý. Điều này mở thêm những khả năng tương tác thú vị trong khu vực đồ họa, thiết kế bản đồ...
- Sự khác biệt thứ 2 liên quan đến điều đầu tiên: Sự thực thi Layout Managers trong Java không được gắn liền với các đối tượng GUIs nhưng nó lại là khái niệm trừu tượng đối với việc sắp xếp các bố cục bảng, điều này có thế có nhiều Layout Manager cho một khu vực riêng biệt của điều khiển Cha. Bạn có thể khoanh một vùng chữ nhật đặc biệt trong điều khiển Cha và thao tác Layout Manager, đưa các thành phần điều khiển con cho nó. Hơn nữa, với những thao tác chuẩn về Layout Manager mà bạn biết trong Java sẽ mang lại cho bạn những sức mạnh kì lạ trong việc thiết kế giao diện.
3. Thư viện Layout:
- Từ sự thực thi các Layout Manager mà tôi giới thiệu trong bài này, ta thấy thư viện Layout này khá quen với các nhà lập trình Java quen thuộc, và hy vọng sẽ dễ hiểu đối với những người mới bắt đầu. Cơ bản chỉ xung quanh 2 Giao diện: ILayoutable và ILayoutManager mà kế thừa từ ILayoutable. Phần còn lại của thư viện bao gồm sự thực thi của 2 giao diện trên đối với các vấn đề của việc thiết kế giao diện.
+ Control Box: Về cơ bản là những cấu trúc điều khiển Layout và làm việc như lớp điều khiển đóng gói cơ bản.
+ ContainerBox: Được kế thừa từ ControlBox, nhưng nó có thể chèn thêm các ControlBox và sắp xếp chúng.
+ AreaPane: Được kế thừa từ ContainerBox, nhưng hoạt động như một điều khiển cấp độ cao. Nó có một khung hình chữ nhật, trong đó nó quản lý các điều khiển khác nhau mà mới chèn thêm vào.
+ RezizeablePane: được kế thừa từ AreaPane. Điều khác nhau duy nhất là nó có thể thay đổi kích cỡ của các đối tượng con trong điều khiển cha. Nó cũng cung cấp thêm một số Layout mẫu trong thư viện:
BorderLayout: Bao gồm 5 đối tượng Layoutable khác nhau, mỗi đối tượng tương ứng với các hướng Bắc, Nam, Đông, Tây và một đối tượng ở giữa. Tất cả những thành phần về kích cỡ đều được nén theo chiều của các hướng, Bắc và Nam cao bằng chiều thẳng đứng, rộng bằng chiều ngang có thể. Còn Đông và Tây thì ngược lại, có chiều rộng theo chiều ngang và chiều dọc theo chiều thẳng đứng. Đối tượng Layoutable trung tâm chiếm tất cả khoảng trống còn lại.
GridLayout: Gồm một số các dòng, các cột và tạo thành một các lưới(Grid) để người sử dụng có thể chèn các điều khiển vào. Mỗi một thành phần trong Grid được tạo với cùng kích cỡ và được sắp xếp từ trái qua phải theo thứ tự được chèn vào.
FlowLayout: Chèn các điều khiển theo dòng nằm ngang. Mỗi khi dòng đó quá rộng với độ rộng của Vùng chứa (Container), thì nó sẽ bắt đầu một dòng mới. Nó có thể được định dạng theo lề trái, phải và giữa theo vùng chứa.

Ảnh trên là một ví dụ về phát triển GUI sử dụng thư viện Layout. Đoạn mã sau thể hiện việc sắp xếp các điều khiển.
PHP Code:
public class CalculatorForm Form
{
       public 
CalculatorForm()
       {
                
Size = new Size(200250);
                
Text "Calculator";

                 
myCalculator = new Calculator();
//Đây sẽ là khung có cấp cao nhất mà tất cả các điều khiển khác sẽ được chèn vào.
//Và cũng có thể thay đổi kích cỡ theo.
                 
AreaPane controlPane = new ResizeablePane(thisClientRectangle, new BorderLayout());

                 
myTextBox = new TextBox();
                 
myTextBox.Text "0";
// Chú ý rằng: Với các điều khiển được chèn vào khung, các ContainerBoxes sẽ.
//Chèn tất cả các điều khiển mà gắn với chúng một cách tự động.
                 
controlPane.Add(myTextBoxBorderLayout.Direction.North);

                 
Panel p = new Panel();
//Mỗi khi các buttonPane có các điều khiển khách thêm vào nó.
//Nó sẽ tự đóng gói trong một ContainerBox.
                 
ContainerBox buttonPane = new ContainerBox(p);
                 
addButtons(buttonPane);

                 
Button clearB = new Button();
                 
clearB.Text "Clear";
                 
clearB.Click += new EventHandler(clear);
                 
controlPane.Add(clearBBorderLayout.Direction.South);

                 
controlPane.Add(buttonPaneBorderLayout.Direction.Center);
       }

       private 
void addButtons(ContainerBox pane)
       {
                 
pane.layoutManager = new GridLayout(43);
                 for(
int i=1i<10i++){
                          
Button b getDigitButton(i);
                          
pane.Add(b);
                 }
                 
Button zero getDigitButton(0);
                 
Button plus getButton("+");
                 
Button minus getButton("-");
                 
plus.Click += new EventHandler(action);
                 
minus.Click += new EventHandler(action);
                 
pane.Add(plus);
                 
pane.Add(zero);
                 
pane.Add(minus);
      }
// Những hàm riêng sẽ gọi cac Contructor.
//...
}  

Kết nối CSDL MySQL với C#

Kết nối CSDL MySQL với C#


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.
PHP Code:
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=0MyOdbcException.Errors.Counti++) {
        
Console.Write("ERROR #" "\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à đủ.