MySQL Connector/NET 具有一个包装 MySQL 语句的批量加载器类LOAD DATA
INFILE
。这使 Connector/NET 能够将数据文件从本地或远程主机加载到服务器。有关的班级是MySqlBulkLoader
. 这个类有多种方法,主要的方法是load
将指定的文件加载到服务器。可以设置各种参数来控制数据文件的处理方式。这是通过设置类的各种属性来实现的。例如,可以指定使用的字段分隔符(如逗号或制表符)以及记录终止符(如换行符)。
以下代码显示了使用
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
属性来完成。然后可以加载该文件并用于填充数据库Career
中的表test
。
笔记
从 Connector/NET 8.0.15 开始,该Local
属性必须True
明确设置为启用本地文件功能。以前
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
请参阅连接器随附的参考文档。