📜  来自两个表的 C# mysql 数据读取器 - SQL (1)

📅  最后修改于: 2023-12-03 15:40:21.166000             🧑  作者: Mango

从两个表读取数据的 C# MySQL 数据读取器 - SQL

在编写 C# 应用程序时,经常需要从 MySQL 数据库中读取数据。当需要获取多个表中的数据时,要么进行多次查询,要么使用 JOIN 操作。这篇文章介绍如何使用 C# MySQL 数据读取器从两个表中读取数据。

准备工作

在开始之前,您需要完成以下步骤:

  1. 安装 MySQL 数据库,并创建两个表。这里使用 usersorders 两个表作为例子。

    CREATE TABLE users (
      id INT PRIMARY KEY,
      name VARCHAR(255) NOT NULL,
      email VARCHAR(255) NOT NULL,
      password VARCHAR(255) NOT NULL
    );
    
    CREATE TABLE orders (
      id INT PRIMARY KEY,
      user_id INT NOT NULL,
      product VARCHAR(255) NOT NULL,
      price DECIMAL(10, 2) NOT NULL,
      FOREIGN KEY (user_id) REFERENCES users(id)
    );
    
  2. 安装 MySQL Connector/NET。可以使用 NuGet 包管理器来安装。

    Install-Package MySql.Data
    
创建 MySQL 数据读取器

下面的代码片段演示了如何创建 MySQL 数据读取器并从两个表中读取数据。首先,创建一个 MySQLConnection 对象来连接 MySQL 数据库。然后使用 SQL 语句查询两个表,使用 INNER JOIN 将它们连接起来。

using System;
using MySql.Data.MySqlClient;

class Program
{
    static void Main(string[] args)
    {
        string connectionString = "server=localhost;user=root;database=test;password=1234";
        MySqlConnection connection = new MySqlConnection(connectionString);
        connection.Open();

        string sql = @"
            SELECT users.*, orders.product, orders.price
            FROM users
            INNER JOIN orders
            ON users.id = orders.user_id
        ";

        MySqlCommand command = new MySqlCommand(sql, connection);
        MySqlDataReader reader = command.ExecuteReader();

        while (reader.Read())
        {
            int id = reader.GetInt32("id");
            string name = reader.GetString("name");
            string email = reader.GetString("email");
            decimal price = reader.GetDecimal("price");
            string product = reader.GetString("product");

            Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", id, name, email, product, price);
        }

        reader.Close();
        connection.Close();
    }
}
解释代码
连接到 MySQL 数据库
string connectionString = "server=localhost;user=root;database=test;password=1234";
MySqlConnection connection = new MySqlConnection(connectionString);
connection.Open();

在这里,我们使用连接字符串创建了一个 MySqlConnection 对象,并打开连接。这里的连接字符串包括以下信息:

  • 服务器地址(localhost)
  • 用户名(root)
  • 数据库名称(test)
  • 密码(1234)
查询 MySQL 数据库
string sql = @"
    SELECT users.*, orders.product, orders.price
    FROM users
    INNER JOIN orders
    ON users.id = orders.user_id
";

MySqlCommand command = new MySqlCommand(sql, connection);
MySqlDataReader reader = command.ExecuteReader();

这里的 SQL 语句使用 INNER JOIN 将 users 表和 orders 表连接起来。使用 SELECT 子句选择要返回的列。请注意,我们使用了 users.* 来表示 users 表的所有列。

然后,我们创建了 MySqlCommand 对象,并将 SQL 语句和连接对象传递给它。最后,调用 ExecuteReader 方法执行查询,并将结果存储在 MySqlDataReader 对象中。

从 MySQL 数据库读取数据
while (reader.Read())
{
    int id = reader.GetInt32("id");
    string name = reader.GetString("name");
    string email = reader.GetString("email");
    decimal price = reader.GetDecimal("price");
    string product = reader.GetString("product");

    Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", id, name, email, product, price);
}

使用 while 循环遍历 MySqlDataReader 对象中的记录,并使用 GetString 和 GetInt32 等方法访问记录中的每个列。

注意,我们使用列名作为参数来调用这些方法。这里的列名必须与 SQL 语句中的列名相同。

结论

这篇文章介绍了如何使用 C# MySQL 数据读取器从两个表中读取数据。我们创建了一个 MySqlConnection 对象来连接 MySQL 数据库,并使用 MySqlDataReader 对象来读取数据。我们使用 INNER JOIN 连接两个表,并在 SELECT 子句中选择要返回的列。如果您需要从多个表中读取数据,请使用类似的 SQL 语句。