iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
Software Development

C# 學習之路系列 第 20

[DAY19] C#基礎與實作(MySQL資料庫)

  • 分享至 

  • xImage
  •  

C# 程式基礎

MySQL資料庫:

  MySQL 是最熱門的關聯資料庫之一。目前DB-Engines將 MySQL 排名為全球第二熱門的資料庫。
https://ithelp.ithome.com.tw/upload/images/20231002/20163217GNjG1yVYIB.png

前置步驟:安裝 MySQL Connector/NET:

  • 開啟 Visual Studio 專案。
  • 點擊 "工具" > "NuGet 套件管理員" > "套件管理器主控台"。
  • 輸入"MySQL"安裝
    https://ithelp.ithome.com.tw/upload/images/20231002/20163217pvIlaznGhq.png

建立資料庫連線:

  • 引用 MySql.Data.MySqlClient

  • 程式範例:

    using MySql.Data.MySqlClient;
    
    const string database = "mydatabase";
    const string databaseServer = "localhost";
    const string databaseUser = "root"; 
    const string databasePassword = "mypassword";
    string connectionString =
        $"server={databaseServer};" + $"user={databaseUser};" +
        $"password={databasePassword};" + $"database={database};" +
        "charset=utf8;";
    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();  //資料庫連線
        // 在這裡執行資料庫操作
        connection.Close(); //資料庫斷線
    }
    

執行 SQL 查詢:

假設mydatabase有一張users的表,表內有id(primary key). username. email
  • 使用 ExecuteReader 讀取資料:
    • 用於執行 SQL 查詢,並返回一個 DataReader 物件,用於讀取查詢結果的資料行和列
    • 使用 DataReader 來逐行讀取查詢結果,並處理這些資料
    • 語法: 
      MySqlDataReader reader = cmd.ExecuteReader();
  • 常見的 MySqlDataReader 方法:
    • Read():
      用於移動到下一行並讀取該行的資料。如果還有更多行可供讀取,則返回 true,否則返回 false。
    • GetInt32(columnName):
      用於讀取整數類型的資料。
    • GetString(columnName):
      用於讀取字串類型的資料。
  • 程式範例:
    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();
    
        string sql = "SELECT * FROM users";
        using (MySqlCommand cmd = new MySqlCommand(sql, connection))
        {
            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    int id = reader.GetInt32("id");  
                    string username = reader.GetString("username");
                    string email = reader.GetString("email");
                    Console.WriteLine($"ID: {id}, 
                            Username: {username}, Email: {email}");
                }
            }
        }
    }
    
    

執行 INSERT 操作:

  • 程式範例:

    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();
    
        string insertSql = 
            "INSERT INTO users (username, email) VALUES (@username, @email)";
        using (MySqlCommand insertCommand = new MySqlCommand(insertSql, connection))
        {
            insertCommand.Parameters.AddWithValue("@username", "john_doe");
            insertCommand.Parameters.AddWithValue("@email", "john@example.com");
    
            int rowsAffected = insertCommand.ExecuteNonQuery();
            Console.WriteLine($"Inserted {rowsAffected} rows.");
        }
    }
    
    

執行 UPDATE 操作:

  • 程式範例:

    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();
    
        string updateSql = 
            "UPDATE users SET email = @newEmail WHERE username = @username";
        using (MySqlCommand updateCommand = new MySqlCommand(updateSql, connection))
        {
            updateCommand.Parameters.AddWithValue("@newEmail", "new_email@example.com");
            updateCommand.Parameters.AddWithValue("@username", "john_doe");
    
            int rowsAffected = updateCommand.ExecuteNonQuery();
            Console.WriteLine($"Updated {rowsAffected} rows.");
        }
    }
    
    

執行 DELETE 操作:

DELETE 操作將永久刪除資料,這邊需要特別注意
  • 程式範例:

    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();
    
        string deleteSql = 
            "DELETE FROM users WHERE username = @username";
        using (MySqlCommand deleteCommand = new MySqlCommand(deleteSql, connection))
        {
            deleteCommand.Parameters.AddWithValue("@username", "john_doe");
    
            int rowsAffected = deleteCommand.ExecuteNonQuery();
            Console.WriteLine($"Deleted {rowsAffected} rows.");
        }
    }
    

參考來源

  1. ChatGPT
  2. C#最強入門邁向頂尖高手之路王者歸來
  3. w3schools C#
  4. DB-Engines

期望挑戰30天持續更新成功 ~ DAY19


上一篇
[DAY18] C#基礎與實作(LINQ)
下一篇
[DAY20] C#基礎與實作(資料結構)
系列文
C# 學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言