国产精品亚洲成在人线_中文字幕在线最新在线不卡_日本欧美一区二区三区乱码_亚洲福利一区二区

9000px;">
  • <menu id="esycg"><strong id="esycg"></strong></menu>
  • <input id="esycg"></input>

    當(dāng)前位置 主頁 > 技術(shù)大全 >

      從入門到精通:C 與MySQL交互的完整代碼示例與常見錯(cuò)誤解決方案

      欄目:技術(shù)大全 時(shí)間:2025-10-16 22:16

      在 C# 中連接 MySQL 數(shù)據(jù)庫是一項(xiàng)非常常見的任務(wù)。下面我將為您提供一個(gè)從基礎(chǔ)到進(jìn)階的完整指南,包括環(huán)境配置、代碼實(shí)現(xiàn)、最佳實(shí)踐和常見問題處理。

      一、 選擇連接器(驅(qū)動(dòng))

      在 C# (.NET) 中連接 MySQL,官方推薦使用 **MySQL Connector/NET**,這是一個(gè)完全托管的 ADO.NET 驅(qū)動(dòng)程序,F(xiàn)在它主要通過 **NuGet** 包進(jìn)行分發(fā),包名稱為:

      * **`MySql.Data`** (官方驅(qū)動(dòng))

      #安裝 NuGet 包

      在您的 C# 項(xiàng)目(如 Console App, ASP.NET Core 等)中,通過以下方式安裝:

      1. **Visual Studio**:右鍵點(diǎn)擊項(xiàng)目 -> “管理 NuGet 程序包” -> 搜索 “`MySql.Data`” -> 安裝。

      2. **.NET CLI**:在終端中運(yùn)行以下命令:

      ```bash

      dotnet add package MySql.Data

      ```

      二、 基礎(chǔ)連接代碼(ADO.NET 方式)

      這是最直接、最可控的方式,類似于連接 SQL Server 的方式。

      #1. 引入必要的命名空間

      ```csharp

      using MySql.Data.MySqlClient; // 核心命名空間

      using System.Data; // 可選,用于 DataTable 等類

      ```

      #2. 構(gòu)建連接字符串(Connection String)

      連接字符串包含連接到數(shù)據(jù)庫所需的所有信息。以下是關(guān)鍵參數(shù):

      | 參數(shù) | 描述 | 示例 |

      | :--- | :--- | :--- |

      | `Server` | MySQL 服務(wù)器地址 | `localhost`, `127.0.0.1`, `example.com` |

      | `Port` | 端口號(hào)(可選,默認(rèn) 3306) | `3306` |

      | `Database` | 要連接的數(shù)據(jù)庫名稱 | `mydatabase` |

      | `Uid` | 用戶名 | `root` |

      | `Pwd` | 密碼 | `your_password` |

      | `Charset` | 字符集(**強(qiáng)烈建議設(shè)置**) | `utf8mb4` (支持表情符號(hào)) |

      **示例連接字符串:**

      ```csharp

      string connectionString = "Server=localhost;Port=3306;Database=mydatabase;Uid=root;Pwd=myPassword;Charset=utf8mb4;";

      ```

      **重要提示:** 永遠(yuǎn)不要將連接字符串硬編碼在代碼中!應(yīng)將其存儲(chǔ)在配置文件中,如 `appsettings.json` (ASP.NET Core) 或 `App.config`/`Web.config` (傳統(tǒng) .NET Framework)。

      #3. 完整的連接與查詢示例

      以下是一個(gè)控制臺(tái)應(yīng)用程序的完整示例,演示了如何建立連接、執(zhí)行查詢并讀取數(shù)據(jù)。

      ```csharp

      using System;

      using MySql.Data.MySqlClient;

      namespace MySqlConnectionExample

      {

      class Program

      {

      static void Main(string[] args)

      {

      // 1. 定義連接字符串

      string connectionString = "server=localhost;user=root;password=123456;database=testdb;charset=utf8mb4;";

      // 2. 創(chuàng)建 MySqlConnection 對(duì)象

      using (MySqlConnection connection = new MySqlConnection(connectionString))

      {

      try

      {

      // 3. 打開數(shù)據(jù)庫連接

      connection.Open();

      Console.WriteLine("Connection opened successfully.");

      // 4. 編寫 SQL 查詢

      string sql = "SELECT id, name, email FROM users WHERE id > @id"; // 使用參數(shù)化查詢防止SQL注入

      // 5. 創(chuàng)建 Command 對(duì)象

      using (MySqlCommand command = new MySqlCommand(sql, connection))

      {

      // 6. 添加參數(shù)

      command.Parameters.AddWithValue("@id", 0);

      // 7. 執(zhí)行查詢,獲取 MySqlDataReader

      using (MySqlDataReader reader = command.ExecuteReader())

      {

      // 8. 檢查是否有數(shù)據(jù)返回

      if (reader.HasRows)

      {

      // 9. 循環(huán)讀取每一行數(shù)據(jù)

      while (reader.Read())

      {

      // 10. 通過列名或索引獲取數(shù)據(jù)

      int id = reader.GetInt32("id");

      string name = reader.GetString("name");

      string email = reader.IsDBNull(reader.GetOrdinal("email")) ? null : reader.GetString("email"); // 安全處理NULL值

      Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");

      }

      }

      else

      {

      Console.WriteLine("No records found.");

      }

      // 11. Reader 會(huì)在 using 塊結(jié)束時(shí)自動(dòng)關(guān)閉

      }

      }

      }

      catch (MySqlException ex)

      {

      // 處理 MySQL 特定的異常

      Console.WriteLine($"MySQL Error {ex.Number}: {ex.Message}");

      }

      catch (Exception ex)

      {

      // 處理其他異常

      Console.WriteLine($"General error: {ex.Message}");

      }

      // 12. Connection 會(huì)在 using 塊結(jié)束時(shí)自動(dòng)關(guān)閉和釋放

      }

      Console.ReadLine();

      }

      }

      }

      ```

      三、 在 ASP.NET Core 中的最佳實(shí)踐

      在現(xiàn)代 ASP.NET Core 應(yīng)用程序中,我們使用依賴注入 (Dependency Injection) 來管理數(shù)據(jù)庫連接,這是更優(yōu)雅和高效的方式。

      #1. 在 `appsettings.json` 中配置連接字符串

      ```json

      {

      "ConnectionStrings": {

      "DefaultConnection": "server=localhost;port=3306;database=myappdb;user=myappuser;password=MyStrongPassword!;charset=utf8mb4;"

      },

      // ... other settings

      }

      ```

      #2. 在 `Program.cs` 中注冊(cè) MySQL 服務(wù)

      ```csharp

      using MySql.Data.MySqlClient;

      using System.Data;

      var builder = WebApplication.CreateBuilder(args);

      // 添加服務(wù)到容器

      builder.Services.AddControllers();

      // 注冊(cè) MySqlConnection,將其作為瞬態(tài)(Transient)服務(wù)

      // 每次請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的連接實(shí)例,ADO.NET 的連接池會(huì)管理底層連接的效率

      builder.Services.AddTransient<IDbConnection>((sp) =>

      {

      var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");

      return new MySqlConnection(connectionString);

      });

      var app = builder.Build();

      // ... 后續(xù)中間件配置

      ```

      #3. 在控制器 (Controller) 或服務(wù)層中使用

      ```csharp

      [ApiController]

      [Route("api/[controller]")]

      public class UsersController : ControllerBase

      {

      private readonly IDbConnection _db;

      // 通過構(gòu)造函數(shù)注入 IDbConnection

      public UsersController(IDbConnection db)

      {

      _db = db;

      }

      [HttpGet]

      public async Task<IActionResult> GetUsers()

      {

      var users = new List<User>();

      // 使用 Dapper 簡化數(shù)據(jù)操作(推薦)

      // users = await _db.QueryAsync<User>("SELECT * FROM Users");

      // 或者使用原生 ADO.NET

      await _db.OpenAsync();

      using (var command = new MySqlCommand("SELECT * FROM Users", (MySqlConnection)_db))

      {

      using (var reader = await command.ExecuteReaderAsync())

      {

      while (await reader.ReadAsync())

      {

      users.Add(new User

      {

      Id = reader.GetInt32("Id"),

      Name = reader.GetString("Name")

      });

      }

      }

      }

      return Ok(users);

      }

      }

      ```

      四、 關(guān)鍵注意事項(xiàng)與最佳實(shí)踐

      1. **連接池 (Connection Pooling)**:

      * `MySql.Data` 默認(rèn)啟用了連接池。這意味著當(dāng)你創(chuàng)建和關(guān)閉 `MySqlConnection` 對(duì)象時(shí),底層物理連接并不會(huì)立即關(guān)閉,而是被放入池中備用,從而大幅提升性能。

      * **務(wù)必使用 `using` 語句**或在 ASP.NET Core 中通過依賴注入來管理連接,以確保連接總是被正確關(guān)閉并返回到池中。避免手動(dòng)調(diào)用 `.Open()` 而不調(diào)用 `.Close()`。

      2. **參數(shù)化查詢**:

      * **永遠(yuǎn)不要**使用字符串拼接來構(gòu)造 SQL 查詢語句,這會(huì)導(dǎo)致嚴(yán)重的 **SQL 注入漏洞**。

      * **始終**像示例中那樣使用 `MySqlParameter` 或 `Parameters.AddWithValue()`。

      3. **異步編程**:

      * 對(duì)于 Web 應(yīng)用程序,使用異步方法(`OpenAsync()`, `ExecuteReaderAsync()`, `ReadAsync()`)可以避免阻塞線程,提高應(yīng)用程序的并發(fā)能力和可擴(kuò)展性。

      4. **錯(cuò)誤處理**:

      * 使用 `try-catch` 塊來捕獲 `MySqlException`,它可以提供具體的錯(cuò)誤編號(hào)(`ex.Number`),便于排查身份驗(yàn)證、服務(wù)器連接等特定問題。

      5. **使用 ORM(對(duì)象關(guān)系映射器)**:

      * 對(duì)于復(fù)雜的應(yīng)用程序,考慮使用像 **Dapper**(輕量、高性能)或 **Entity Framework Core**(功能全面、官方支持)這樣的 ORM。它們可以簡化數(shù)據(jù)訪問代碼。

      * EF Core 同樣可以通過 `Pomelo.EntityFrameworkCore.MySql` 提供程序來支持 MySQL。

      總結(jié)

      在 C# 中連接 MySQL 的步驟可以概括為:

      1. **安裝** `MySql.Data` NuGet 包。

      2. **配置**安全的連接字符串(存儲(chǔ)在配置文件中)。

      3. **使用 `using` 語句**創(chuàng)建和銷毀 `MySqlConnection` 對(duì)象以利用連接池。

      4. **使用 `MySqlCommand` 和 `MySqlParameter`** 執(zhí)行參數(shù)化查詢。

      5. **在 ASP.NET Core 中**,通過依賴注入在 `Program.cs` 中注冊(cè) `IDbConnection`,并在控制器中獲取使用。

      遵循這些步驟和最佳實(shí)踐,您就可以在 C# 應(yīng)用程序中高效、安全地與 MySQL 數(shù)據(jù)庫進(jìn)行交互。

      另外搭配便捷的MYSQL備份工具,可定時(shí)備份、異地備份,MYSQL導(dǎo)出導(dǎo)入?杀镜剡B接LINUX里的MYSQL,簡單便捷。可以大大地提高工作效率喔。


    你的MySQL數(shù)據(jù)庫為什么總是又慢又卡?掌握這五大優(yōu)化法則,查詢速度快十倍!(上篇)
    你的MySQL數(shù)據(jù)庫為什么總是又慢又卡?掌握這五大優(yōu)化法則,查詢速度快十倍!(下篇)
    https://baijiahao.baidu.com/s?id=1844039166149636850
    從語法到實(shí)戰(zhàn):一文掌握MySQL表結(jié)構(gòu)擴(kuò)展的正確方法
    避開安全陷阱:MySQL登錄的正確姿勢(shì)與.my.cnf配置文件的秘密
    從入門到精通:C 與MySQL交互的完整代碼示例與常見錯(cuò)誤解決方案
    MySQL基礎(chǔ)入門:CREATE DATABASE命令詳解與字符集選擇指南
    一鍵操作背后的隱患:如何安全高效地修改MySQL表名及其依賴項(xiàng)?
    Linux系統(tǒng)常用FTP服務(wù)端
    FileZilla綠色版和安裝版有什么區(qū)別?
    国产精品亚洲成在人线_中文字幕在线最新在线不卡_日本欧美一区二区三区乱码_亚洲福利一区二区
  • <menu id="esycg"><strong id="esycg"></strong></menu>
  • <input id="esycg"></input>
  • 亚洲国产精品久久不卡毛片| 91精品国产综合久久国产大片| 日韩电影免费在线观看网站| 国产精品99久久久久久久vr| 久久精品免费观看| 日日夜夜免费精品| 日韩电影网1区2区| 欧美另类高清zo欧美| 国产精品久久久久影院老司| 一区二区激情小说| 国产精品网曝门| 久久精品水蜜桃av综合天堂| 精东粉嫩av免费一区二区三区| 亚洲国产日韩一区二区| 美腿丝袜一区二区三区| 国产成人精品网址| 国产亚洲短视频| 91丨国产丨九色丨pron| 精品成人a区在线观看| 91在线观看污| 风间由美中文字幕在线看视频国产欧美| 精品成人一区二区| 一本久久综合亚洲鲁鲁五月天| 色婷婷综合久久久中文字幕| 夜夜嗨av一区二区三区中文字幕| 欧美精品亚洲一区二区在线播放| 中文字幕乱码亚洲精品一区| 欧美一卡二卡三卡四卡| 久久精品视频在线免费观看| 日韩成人伦理电影在线观看| 日本一二三四高清不卡| 国产成人在线视频播放| 亚洲va欧美va人人爽午夜| 国产激情91久久精品导航| 成人不卡免费av| 欧美三级电影精品| 国产女主播在线一区二区| 国产欧美一区二区精品仙草咪| 丝瓜av网站精品一区二区| 亚洲一区二区三区四区在线| 99久久er热在这里只有精品66| 国产日产欧美一区| 成人ar影院免费观看视频| 国产一区二区不卡老阿姨| 91色婷婷久久久久合中文| 欧美视频精品在线观看| 欧美精品一区二区在线播放| 亚洲乱码日产精品bd| 欧美va亚洲va| 午夜精品久久久久久久久| 色婷婷久久一区二区三区麻豆| 91麻豆精品国产综合久久久久久| 亚洲丝袜美腿综合| 在线观看日韩av先锋影音电影院| 中文字幕一区日韩精品欧美| 精品国产乱子伦一区| 欧美电影免费观看完整版| 欧美mv日韩mv亚洲| 日韩精品一二三四| 国产一级精品在线| 日韩一卡二卡三卡| 亚洲主播在线播放| 欧美一区二区三区视频在线| 亚洲国产你懂的| 99re这里只有精品6| 一区二区三区精品在线| 日韩欧美色综合| 欧美日韩你懂的| 日欧美一区二区| 亚洲www啪成人一区二区麻豆| 一本一道久久a久久精品| 国产精品第四页| 午夜精品视频在线观看| 男男成人高潮片免费网站| 美日韩一区二区三区| 精品免费视频一区二区| 亚洲免费成人av| 91精品国产综合久久婷婷香蕉| 国产精品网站在线观看| 欧美日韩一级片网站| 国产精品综合av一区二区国产馆| 97久久人人超碰| 老司机午夜精品99久久| 欧美一卡二卡在线| 91亚洲精品久久久蜜桃| 波多野结衣欧美| 国产午夜亚洲精品不卡| 色婷婷久久久久swag精品| 国产精品卡一卡二卡三| 日韩午夜在线播放| 午夜精品aaa| 一区二区三区av电影| 欧美无乱码久久久免费午夜一区| 成人性生交大合| 亚洲观看高清完整版在线观看| 国产欧美精品国产国产专区| 久久一区二区三区四区| 一二三四社区欧美黄| 亚洲国产精品二十页| 91成人在线免费观看| 欧美性色欧美a在线播放| 国产三级三级三级精品8ⅰ区| 成人亚洲一区二区一| 中文字幕中文在线不卡住| 国内精品第一页| 中文字幕在线观看一区| 午夜精品久久久久久久久久久| 亚洲精品少妇30p| 久久97超碰色| 日韩视频免费直播| 亚洲电影一区二区三区| 免费视频最近日韩| 国产69精品久久久久毛片| 亚洲成人在线网站| 在线精品亚洲一区二区不卡| 成人av在线播放网址| 国产在线观看免费一区| 中文字幕中文乱码欧美一区二区| 成人免费视频一区| 97久久精品人人做人人爽50路| 亚洲精品视频自拍| 欧美中文一区二区三区| 99精品视频在线免费观看| 激情图区综合网| 秋霞成人午夜伦在线观看| 国产一区二区三区久久悠悠色av| 美女在线视频一区| 国产精品乱码一区二三区小蝌蚪| 欧美成人video| 亚洲一级二级在线| 中文乱码免费一区二区| 亚洲欧洲一区二区在线播放| 午夜精品一区二区三区电影天堂| 欧美欧美欧美欧美首页| 欧美韩国日本不卡| 99久久精品国产精品久久| 日韩三级电影网址| 欧美一级在线免费| 日韩精品欧美精品| 欧美视频一区二区| 91精品国产91久久久久久最新毛片| 国产69精品久久99不卡| 成人高清视频在线观看| 中文字幕一区av| 欧美成人三级在线| 国产精品视频免费| 91免费精品国自产拍在线不卡| 国产香蕉久久精品综合网| 91麻豆国产香蕉久久精品| 不卡区在线中文字幕| 国产精品久久久一区麻豆最新章节| 欧美自拍偷拍午夜视频| 日韩一区二区三区高清免费看看| 国产精品色一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整| 91麻豆国产精品久久| 国产91高潮流白浆在线麻豆| 日韩视频免费直播| 久久影院午夜片一区| 午夜欧美一区二区三区在线播放| 日韩高清电影一区| 国产成都精品91一区二区三| 亚洲成人自拍偷拍| 色婷婷av一区二区三区之一色屋| 精品一区二区三区久久| 国产精品自拍av| 成人小视频在线| 久久99热99| 成人激情文学综合网| 色拍拍在线精品视频8848| 国产欧美日韩麻豆91| 91香蕉视频污| 伊人色综合久久天天人手人婷| av资源网一区| 日韩精品中文字幕在线一区| 欧美日韩国产精品成人| 一本到不卡免费一区二区| 国产精品一品二品| 亚洲.国产.中文慕字在线| av中文字幕一区| 蜜臀91精品一区二区三区| 国产精品一区二区三区乱码| 欧美精品在线一区二区三区| 欧美日韩久久一区二区| 亚洲一区在线播放| 欧美大尺度电影在线| 91精品国产综合久久精品性色| 欧美日韩另类国产亚洲欧美一级| 精品乱人伦小说| 久久久蜜臀国产一区二区| 欧美一区二区三区成人| 亚洲人成小说网站色在线| 美国毛片一区二区| 欧美亚洲国产怡红院影院| 欧美国产精品一区二区| 国产精品免费网站在线观看| 2020国产成人综合网| 精品一二三四区| 成人毛片在线观看| 色嗨嗨av一区二区三区|