首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

VB.NET 連接 MySQL 完整指南:從 Connector 安裝到 CRUD 封裝

     編輯:MySQL 綜合教學

VB.NET 連接 MySQL 完整指南:從 Connector 安裝到 CRUD 封裝

Visual Studio 原生不支援 MySQL,需安裝 MySQL Connector/NET 才能在 VB.NET 專案中操作資料庫。本文以 VS 2022 / .NET 6 為例,完整示範從下載、引用、封裝資料存取類到實際呼叫的全流程。

1. 取得並安裝 Connector/NET

  • 官網下載:MySQL Connector/NET(選擇 MSI 安裝版或 NuGet 套件)。
  • NuGet 方式(推薦):
    Install-Package MySql.Data -Version 8.3.0
    或在專案右鍵 → 管理 NuGet 套件 → 搜尋 MySql.Data 安裝。

2. 封裝通用資料存取類 MySqlHelper

Imports MySql.Data.MySqlClient
Imports System.Data

Public Class MySqlHelper
    Private ReadOnly _connStr As String

    Public Sub New(connStr As String)
        _connStr = connStr
    End Sub

    ''' <summary>執行查詢,回傳 DataTable</summary>
    Public Function ExecuteQuery(sql As String, ParamArray params As MySqlParameter()) As DataTable
        Dim dt As New DataTable()
        Using conn As New MySqlConnection(_connStr),
              cmd As New MySqlCommand(sql, conn)
            If params IsNot Nothing AndAlso params.Length > 0 Then
                cmd.Parameters.AddRange(params)
            End If
            Using da As New MySqlDataAdapter(cmd)
                da.Fill(dt)
            End If
        End Using
        Return dt
    End Function

    ''' <summary>執行非查詢(INSERT/UPDATE/DELETE),回傳影響列數</summary>
    Public Function ExecuteNonQuery(sql As String, ParamArray params As MySqlParameter()) As Integer
        Using conn As New MySqlConnection(_connStr),
              cmd As New MySqlCommand(sql, conn)
            If params IsNot Nothing AndAlso params.Length > 0 Then
                cmd.Parameters.AddRange(params)
            End If
            conn.Open()
            Return cmd.ExecuteNonQuery()
        End Using
    End Function

    ''' <summary>執行純量查詢(COUNT/MAX 等)</summary>
    Public Function ExecuteScalar(Of T)(sql As String, ParamArray params As MySqlParameter()) As T
        Using conn As New MySqlConnection(_connStr),
              cmd As New MySqlCommand(sql, conn)
            If params IsNot Nothing AndAlso params.Length > 0 Then
                cmd.Parameters.AddRange(params)
            End If
            conn.Open()
            Dim obj = cmd.ExecuteScalar()
            If obj Is Nothing OrElse obj Is DBNull.Value Then Return Nothing
            Return CType(obj, T)
        End Using
    End Function
End Class

3. 實際呼叫範例

Dim helper As New MySqlHelper("Server=127.0.0.1;Port=3306;Database=testdb;Uid=dev;Pwd=*****;SslMode=Preferred;")

' 查詢並繫結 GridView
Dim dt = helper.ExecuteQuery("SELECT id, name, email FROM users WHERE status=@status", New MySqlParameter("@status", 1))
GridView1.DataSource = dt
GridView1.DataBind()

' 參數化新增
Dim affected = helper.ExecuteNonQuery(
    "INSERT INTO users(name, email, created_at) VALUES(@name, @email, NOW())",
    New MySqlParameter("@name", "Alice"),
    New MySqlParameter("@email", "alice@example.com")
)
Console.WriteLine($"新增 {affected} 筆")

' 純量查詢
Dim total = helper.ExecuteScalar(Of Long)("SELECT COUNT(*) FROM users WHERE status=@status", New MySqlParameter("@status", 1))
Console.WriteLine($"啟用使用者:{total} 位")

4. 關鍵最佳實踐

  • 參數化查詢:杜絕 SQL 注入,利用 MySqlParameter 自動處理型別與跳脫。
  • 連線池:Connector/NET 內建連線池,連線字串加 Pooling=true;Min Pool Size=5;Max Pool Size=100; 依負載調整。
  • Using 區塊:確保 Connection/Command/DataAdapter 正確 Dispose,避免洩漏。
  • 異步支援:.NET Core / 5+ 可改用 ExecuteReaderAsync、ExecuteNonQueryAsync 提升吞吐。
  • 錯誤處理:捕捉 MySqlException,依 Number 區分 1062(重複鍵)、1213(死鎖)、2006(連線中斷) 等常見錯誤碼做重試或回滾。

5. 常見坑點排查

現象原因解決
Unable to connect to any of the specified MySQL hosts防火牆/安全組阻擋 3306、bind-address 設為 127.0.0.1開放埠、改 bind-address=0.0.0.0 或建立 SSH 隧道
Authentication plugin 'caching_sha2_password' not supportedMySQL 8.0 預設新認證外掛,舊版 Connector 不支援升級 Connector 8.0+,或建立用戶指定 IDENTIFIED WITH mysql_native_password
SSL connection error預設啟用 SSL,憑證驗證失敗連線字串加 SslMode=Preferred 或 SslMode=None(僅內網)

結語:掌握 Connector/NET 正確用法,封裝輕量 Helper 類,即可在 VB.NET 專案中安全、高效操作 MySQL。後續可延伸 Dapper/EF Core 等 ORM,進一步提升開發效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved