文档首页
MySQL Connector/NET 开发人员指南
相关文档 下载本手册
PDF (US Ltr) - 1.3Mb
PDF (A4) - 1.3Mb


MySQL Connector/NET 开发人员指南  /  Connector/NET 编程  /  使用 MySqlBulkLoader 类

5.11 使用 MySqlBulkLoader 类

MySQL Connector/NET 提供了一个批量加载器类,它包装了 MySQL 语句 LOAD DATA INFILE。这使 Connector/NET 能够将数据文件从本地或远程主机加载到服务器,或者将流加载到数据库(从 Connector/NET 8.0.32 开始)。

相关类是 MySqlBulkLoader。此类具有多种方法,主要的重载方法是 load,它允许直接将流对象加载到数据库(8.0.32)或将指定文件加载到服务器。可以设置各种参数来控制如何处理数据文件。这是通过设置类的各种属性来实现的。例如,可以使用逗号或制表符等指定使用的字段分隔符,以及换行符等指定记录终止符。

以下代码展示了使用 MySqlBulkLoader 类的简单示例。首先,需要创建一个空表,在本例中是在 test 数据库中。

CREATE TABLE Career (
       Name VARCHAR(100) NOT NULL,
       Age INTEGER,
       Profession VARCHAR(200)
);

还创建了一个简单的制表符分隔的数据文件(可以使用任何其他字段分隔符,例如逗号)。

Table Career in Test Database
Name  Age  Profession

Tony   47  Technical Writer
Ana    43  Nurse
Fred   21  IT Specialist
Simon  45  Hairy Biker

对于此测试文件,需要忽略前三行,因为它们不包含表数据。这可以通过在以下 C# 代码示例中设置 NumberOfLinesToSkip 属性来完成。然后可以加载文件并用于填充 test 数据库中的 Career 表。

注意

从 Connector/NET 8.0.15 开始,必须明确将 Local 属性设置为 True 才能启用本地 infile 功能。以前版本的默认值为 True

using System;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            string connStr = "server=localhost;user=root;database=test;port=3306;password=******";
            MySqlConnection conn = new MySqlConnection(connStr);

            MySqlBulkLoader bl = new MySqlBulkLoader(conn);
            bl.Local = true;
            bl.TableName = "Career";
            bl.FieldTerminator = "\t";
            bl.LineTerminator = "\n";
            bl.FileName = "c:/career_data.txt";
            bl.NumberOfLinesToSkip = 3;

            try
            {
                Console.WriteLine("Connecting to MySQL...");
                conn.Open();

                // Upload data from file
                int count = bl.Load();
                Console.WriteLine(count + " lines uploaded.");

                string sql = "SELECT Name, Age, Profession FROM Career";
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                MySqlDataReader rdr = cmd.ExecuteReader();

                while (rdr.Read())
                {
                    Console.WriteLine(rdr[0] + " -- " + rdr[1] + " -- " + rdr[2]);
                }

                rdr.Close();

                conn.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.WriteLine("Done.");
        }
    }
}

有关 LOAD DATA INFILE 的更多信息,请参见 LOAD DATA 语句。有关 MySqlBulkLoader 的更多信息,请参见连接器附带的参考文档。