1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Sử dụng VB.NET để kết nối mySQL doc

8 883 7
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Sử dụng VB.NET để kết nối MySQL
Thể loại Hướng dẫn
Định dạng
Số trang 8
Dung lượng 184,53 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Định nghĩa ConnectionString Những ai đã quen với lập trình .NET khi sử dụng ADO để kết nối với CSDL cũng đã rất quen thuộc với cụm từ Connection String.. Với MySQL cũng vậy, một số thông

Trang 1

Sử dụng VB.NET để kết nối mySQL Yêu cầu:

- MySQL 5.0.27

- My SQL Connector/Net 5.0.3

- Toad for MySQL Freeware 2.0.3

- VB.NET 2005 Express Edition Phần I Định nghĩa ConnectionString

Những ai đã quen với lập trình NET khi sử dụng ADO để kết nối với CSDL cũng đã rất quen thuộc với cụm từ Connection String Đúng ra, trong lập trình ConnectionString là thuộc tính của đối tượng ADO Connection Với MySQL cũng vậy, một số thông số truyền vào chuỗi định nghĩa kết nốivới CSDL gần như giống hoàn toàn với ADO.NET; tuy nhiên chúng ta không sử dụng ADO.NET mà là MySQL Connector

Ví dụ:

Dim MySQLConnectionString As String

MySQLConnectionString = "Server=myServer;" & _

"Database=myDatabase;" & _

"Uid=myUserID;" & _

"Pwd=myPassword;" & _

"Connect Timeout=30;"

Vi dụ trên đây không bao gồm thông số Persist Security Info và mặc định giá trị PSI là false; bất

cứ thông số nào trong chuỗi ConnectionString mà thiếu đều mang giá trị mặc định

Một đối tượng dùng để kết nối với CSDL phải được khởi tạo và mở kết nối Tuy nhiên, có nhiều cách khai báo khác nhau sẽ nảy sinh những vấn đề vể bộ nhớ

Ví dụ:

Dim MySQLConnectionString As String

Dim MyADOConnection As MySqlConnection

MySQLConnectionString = "Server=myServer;" & _

"Database=myDatabase;" & _

"Uid=myUserID;" & _

"Pwd=myPassword;" & _

"Connect Timeout=30;"

MyADOConnection = New MySqlConnection(MySQLConnectionString)

MyADOConnection.Open()

Ví dụ trên sẽ gửi lệnh connect thông qua phương thức khởi tạo của 9ối tượng MySQlConnection; nếu như chưa có connection nào được tạo thì phương thức Open làm nhiệm vụ tạo ra một

Trang 2

connection mới; nếu như đã có rồi thì hàm open sẽ lấy một connection có sẵn trong danh sách connection available

Dim MySQLConnectionString As String

Dim MyADOConnection As MySqlConnection

MySQLConnectionString = "Server=myServer;" & _

"Database=myDatabase;" & _

"Uid=myUserID;" & _

"Pwd=myPassword;" & _

"Connect Timeout=30;"

MyADOConnection = New MySqlConnection()

MyADOConnection.ConnectionString = MySQLConnectionString

MyADOConnection.Open()

Ví dụ trên đây sẽ tạo một connection hoàn toàn mới vì khi khởi tạo không gán thuộc tính

connectionstring cho đối tượng mySQL Connection; do đó không thể lấy trong sanh sách các connection có sẵn được Chỉ khi phương thức Open được gọii thì câu lệnh

MyADOConnection.ConnectionString = MySQLConnectionString mới được sử dụng

Lưu ý: Cái này cực kỳ quan trọng và cực kỳ hay, khi lập trình chú ý đến vấn đề sử dụng

connectionstring Tuyệt đối kông nên nhúng connectionstirng vào trong code vì rất khó nâng cấp

và không an toàn chút nào Có 2 lý do chính:

1 hacker có thể lợi dụng các lỗi bảo mật của MySQL để thay thế chuổi connectionstring vì chuỗi này đã được đóng gói lại một dòng duy nhất Bằng cách nào đó hacker sẽ cộng dồn biến

connectionstirng với một chuỗi nào đó mà MySQL dễ dàng pass qua các lỗi hoặc chỉ trả về kết quả thực thi câu lệnh sau cùng

2 Khó bảo trì vì nếu một trongc ác thông số của câu lệnh connectionstring thay đổi bạn phải biên dịch lại hoàn toàn bộ code, thật là phiền phức

Có môt cách mà bạn có thể an tâm giao phó việc bảo mật cho các nhà quản lý host hoặc admin

đó là đưa câu lệnh này vào file cấu hình (web.config) ; do đó khi có thay đổi bất kỳ thông số nào cũng có thể thay đổi không cần biên dịch lại

<CONNECTIONSTRINGS>

<ADD name="MySQLConnectionString My MySettings MySQLConnectionString

connectionString=" Server='xxx; Database=xxx; Uid=xxx; Pwd=xxx;"' />

</CONNECTIONSTRINGS>

Khi đó muốn sử dụng chỉ cần khai báo như sau:

Dim mMySQLConnectionString As String = My.Settings.MySQLConnectionString

Dim mMySQLConnectionString As String = My.Settings.MySQLConnectionString

Dim MyADOConnection As New MySqlConnection

Trang 3

MyADOConnection.ConnectionString = MySQLConnectionString

MyADOConnection.Open()

Thế là xong phần khai báo kết nối CSDL

Mở và đóng kết nối

Việc mở và đóng kết nới một đối tượng ADO.NET là công việc cực ký quan trọng nhất trong bất

cứ tình huống nào Bởi vì nếu coding không cẩn thận sẽ dễ gây ra tràn bộ nhớ Quá trình mở và đóng kết nối luôn trãi qua 3 bước: Tạo một đối tượng ADO Connection; gửi ConnectionString cho thuộc thính của đối tượng hoặc truyền vào hàm khởi tạo của đối tượng; dùng phương thức Open() để mời kết nối

Khi không có nhu cầu sử dụng đối tượng Connection này nữa, hãy dùng IsNothing (cho

VB.NET) để hủy tất cả các connection và liên kết tới đối tượng; và cũng để giải phóng tài

nguyên hệ thống Cũng giống như SQL; MySQL cũng dựng sẵn các exception để giải quyết vấn

đề lỗi xảy ra của đối tượng

Xem 2 ví dụ để có thể thấy cách mở và đóng kết nối an toàn khi sử dụng MySQLConnection Private Function MySQLADOConnectionOpen(ByRef pErrorMessageString As String) As Boolean

Try

mMySqlConnection = New MySqlConnection

mMySqlConnection.ConnectionString = mMySQLConnectionString

mMySqlConnection.Open()

Return (True)

Catch exError As MySqlException

pErrorMessageString = exError.Message

Return (False)

End Try

End Function

Public Function MySQLADOConnectionClose(ByRef pErrorMessageString As String) As Boolean

Try

If Not IsNothing(mMySqlConnection) Then

If mMySqlConnection.State = ConnectionState.Open Then

mMySqlConnection.Close()

End If

mMySqlConnection = Nothing

End If

Return (True)

Catch exError As MySqlException

pErrorMessageString = exError.Message

Return (False)

Trang 4

End Try

End Function

Đọc và xử lý dữ liệu

Trước khi bắt đầu; bạn dãy dùng phần mềm Toad for MySQL để tạo CSDL và tạo dữ liệu giả làm ví dụ Đây là công cụ

rất hữu ích, tích hợp với MySQL, IBM DB2, và MS SQL Ví dụ, bạn tạo được CSDL

DROP TABLE IF EXISTS `states`;

CREATE TABLE `states` (

`statename` varchar(20) NOT NULL,

`abbrev` varchar(10) NOT NULL,

`postal` char(2) NOT NULL,

`capital` varchar(20) NOT NULL,

PRIMARY KEY (`postal`),

KEY `statename` (`statename`),

KEY `capital` (`capital`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `states`(`statename`,`abbrev`,`postal`,`capital`) VALUES

('Alaska','Alaska','AK','Juneau'),

('Alabama','Ala.','AL','Montgomery'),

('Arkansas','Ark.','AR','Little Rock'),

('Arizona','Ariz.','AZ','Phoenix'),

('California','Calif.','CA','Sacramento'),

('Colorado','Colo.','CO','Denver'),

('Connecticut','Conn.','CT','Hartford'),

('Dist of Columbia','D.C.','DC','Washington'),

('Delaware','Del.','DE','Dover'),

('Florida','Fla.','FL','Tallahassee'),

('Georgia','Ga.','GA','Atlanta'),

('Guam','Guam','GU','Agaña'),

('Hawaii','Hawaii','HI','Honolulu'),

('Iowa','Iowa','IA','Des Moines'),

('Idaho','Idaho','ID','Boise'),

('Illinois','Ill.','IL','Springfield'),

('Indiana','Ind.','IN','Indianapolis'),

('Kansas','Kans.','KS','Topeka'),

('Kentucky','Ky.','KY','Frankfort'),

('Louisiana','La.','LA','Baton Rouge'),

('Massachusetts','Mass.','MA','Boston'),

('Maryland','Md.','MD','Annapolis'),

('Maine','Maine','ME','Augusta'),

('Michigan','Mich.','MI','Lansing'),

('Minnesota','Minn.','MN','St Paul'),

Trang 5

('Missouri','Mo.','MO','Jefferson City'),

('Mississippi','Miss.','MS','Jackson'),

('Montana','Mont.','MT','Helena'),

('North Carolina','N.C.','NC','Raleigh Durham'),

('North Dakota','N.D.','ND','Bismarck'),

('Nebraska','Nebr.','NE','Lincoln'),

('New Hampshire','N.H.','NH','Concord'),

('New Jersey','N.J.','NJ','Trenton'),

('New Mexico','N.M.','NM','Santa Fe'),

('Nevada','Nev.','NV','Carson City'),

('New York','N.Y.','NY','Albany'),

('Ohio','Ohio','OH','Columbus'),

('Oklahoma','Okla.','OK','Oklahoma City'),

('Oregon','Ore.','OR','Salem'),

('Pennsylvania','Pa.','PA','Harrisburg'),

('Puerto Rico','P.R.','PR','San Juan'),

('Rhode Island','R.I.','RI','Providence'),

('South Carolina','S.C.','SC','Columbia'),

('South Dakota','S.D.','SD','Pierre'),

('Tennessee','Tenn.','TN','Nashville'),

('Texas','Tex.','TX','Austin'),

('Utah','Utah','UT','Salt Lake City'),

('Virginia','Va.','VA','Richmond'),

('Virgin Islands','V.I.','VI','Charlotte Amalie'),

('Vermont','Vt.','VT','Montpelier'),

('Washington','Wash.','WA','Olympia'),

('Wisconsin','Wis.','WI','Madison'),

('West Virginia','W.Va.','WV','Charleston'),

('Wyoming','Wyo.','WY','Cheyenne');

Tạo sẵn một SP để đọc và hiển thị tất cả các Statename từ bảng State như sau:

DROP PROCEDURE IF EXISTS `usp_state_select_name`;

CREATE PROCEDURE `usp_state_select_name`()

BEGIN

SELECT `statename`

FROM `states`

ORDER BY `statename`;

END;

Và cũng giả sử rằng bạn tạo một form, trên form có button dùng để đọc dữ liệu Ở đây, chúng tôi xin giới thiệu những dòng lệnh trong VB.NET 2005 Khi click đúp vào button Load

VB.NET2005 thì NET sẽ tạo sẵn cho bạn sự kiện Click của Button

Trang 6

Trước hết chúng ta phải giải phóng bộ nhớ cho đối tượng connection Để làm việc này, trong VB.NET có một interface gọi là IDisposable, chúng ta tạomột class gọi là ObjectDisposeClass cài đặt từ interface IDisposable Đọan code sau đây sẽ tự động sinh ra khi chúng ta tạo đối tượng

từ interface IDisposable Vì đối tượng Connection thuộc class

MySQLConnection kế thừa từ class ObjectDisposeClass, do đó để giải phóng bộ nhớ chúng ta dùng phương thức Dispose

Public Class ObjectDisposeClass

Implements IDisposable

Private disposedValue As Boolean = False

Public Sub Dispose() Implements IDisposable.Dispose

Dispose(True)

GC.SuppressFinalize(Me)

End Sub

Protected Overridable Sub Dispose(ByVal disposing As Boolean)

If Not Me.disposedValue Then

If disposing Then

'TODO: free unmanaged resources when explicitly called

End If

'TODO: free shared unmanaged resources

End If

Me.disposedValue = True

End Sub

End Class

Và đây là code của Button khi xảy ra sự kiện click, trong đây có gọi hàm

ListBoxLoadVBNET2005 để xử lý dữ liệu cho ListBox

Trang 7

Private Sub LoadVBNET2005Button_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs)

Handles LoadVBNET2005Button.Click

Cursor = Cursors.WaitCursor

Using ConnectionStringObject As New

MySQLConnectionStringClass(mMySQLConnectionString)

Call ConnectionStringObject.ListBoxLoadVBNET2005(ListBoxStates, _

mErrorMessageString)

If Not IsNothing(mErrorMessageString) Then

Cursor = Cursors.Default

MessageBox.Show(mErrorMessageString, _

"MySQL Connection String", _

MessageBoxButtons.OK, _

MessageBoxIcon.Information)

End If

End Using

Cursor = Cursors.Default

End Sub

Public Sub ListBoxLoadVBNET2005(ByVal pListBox As ListBox, _

ByRef pErrorMessageString As String)

Dim StateNameString As String

Try

Using mMySqlConnection As New MySqlConnection(mMySQLConnectionString) mMySqlConnection.Open()

Using mMySqlCommand As New MySqlCommand

With mMySqlCommand

Connection = mMySqlConnection

CommandType = CommandType.StoredProcedure

CommandText = "usp_state_select_name"

mMySqlDataReader = ExecuteReader(CommandBehavior.SingleResult) End With

With pListBox

Items.Clear()

If mMySqlDataReader.HasRows Then

BeginUpdate()

Do While mMySqlDataReader.Read()

mObjectjValue = mMySqlDataReader.GetString(0)

If Not IsDBNull(mObjectjValue) Then

StateNameString = mObjectjValue.ToString()

Else

StateNameString = String.Empty

End If

Items.Add(StateNameString)

Loop

Trang 8

EndUpdate()

SelectedIndex = 0

End If

End With

End Using

End Using

Catch exErr As MySqlException

pErrorMessageString = exErr.Message

End Try

End Sub

Lưu ý là trong đọan code trên, tất cả các đối tượng như mMySqlDataReader, mMySqlCommand

và mMySqlConnection đều được giải phóng bộ nhớ Các chức năng khác trên form chúng tôi sẽ không giới thiệu vì đó thuộc những kiến thức cơ bản Chúng tôi hy vọng rằng qua bài viết này, các bạn sẽ có đủ kiến thức để vừa sử dụng SQL Server mà mySQL và có cái nhìn tổng quát về hai hệ CSDL rồi chọn ra cho hệ thống một CSDL quản lý phù hợp

 

Ngày đăng: 25/01/2014, 13:20

TỪ KHÓA LIÊN QUAN