在 .NET 專案中透過 ODBC 連接 MySQL,必須先安裝兩個核心元件:
注意: 現代專案建議改用原生 MySQL Connector/NET (NuGet: MySql.Data),效能更佳且無需 ODBC 中介層。
本範例封裝三大核心類別:
ManipStringForMySQL:SQL 字串清理與參數化處理 (防注入)。MySQL_Requettes:核心查詢執行類別,提供 DataSet、DataReader、純量值等多種回傳模式。MySQL_Utils:資料庫連線測試、伺服器狀態檢查等工具方法。Public Shared Function MyODBCDataset(ByVal ReqSQL As String, _
ByVal LaBase As String, ByVal Server As String, _
ByVal PassWord As String, ByVal User As String, _
ByVal NomDataSet As String) As DataSet
' 建立 ODBC 連線字串
Dim MyConString As String = _
"DRIVER={MySQL ODBC 3.51 Driver};" & _
"SERVER=" & Server & ";" & _
"DATABASE=" & LaBase & ";" & _
"UID=" & User & ";" & _
"PASSWORD=" & PassWord & ";" & _
"OPTION=3;"
Dim MyODBCConnexion As New OdbcConnection(MyConString)
Try
Dim ds As New DataSet()
' 使用 DataAdapter 自動開關連線並填充 DataSet
Dim cmd As New OdbcDataAdapter(ReqSQL, MyConString)
cmd.Fill(ds, NomDataSet)
Return ds
Catch MyOdbcException As OdbcException
HttpContext.Current.Response.Write(MyOdbcException.ToString())
Catch MyException As Exception
HttpContext.Current.Response.Write(MyException.ToString())
End Try
Return Nothing
End Function
Dim MonDatasetTemp As DataSet = MySQL_Requettes.MyODBCDataset( _
SQL, _
Constantes.ODBCBase, _
Constantes.ODBCServer, _
Constantes.ODBCPwd, _
Constantes.ODBCUser, _
"MonDataset")
OPTION=3 代表 FOUND_ROWS 旗標,影響 ROW_COUNT() 行為。OdbcDataAdapter.Fill() 內部自動處理 Open()/Close(),但長連線場景建議手動控制 OdbcConnection 生命週期。OdbcException (驅動層錯誤) 與通用 Exception,記錄詳細堆疊資訊。OdbcCommand.Parameters.Add() 防止 SQL Injection。MySql.Data.MySqlClient 命名空間),原生支援非同步、連線池、EF Core 整合。appsettings.json / web.config 並加密敏感資訊。