文件首頁
MySQL Connector/NET 開發人員指南
相關文件 下載本手冊
PDF (美國信紙) - 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),或將指定檔案載入到伺服器。可以設定各種參數來控制如何處理資料檔案。這是透過設定類別的各種屬性來實現的。例如,可以指定使用的欄位分隔符號,例如逗號或 Tab,以及記錄終止符號,例如換行符號。

以下程式碼顯示使用 MySqlBulkLoader 類別的簡單範例。首先,需要在本例中的 test 資料庫中建立一個空表格。

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

還會建立一個簡單的 Tab 分隔資料檔案(它可以使用任何其他欄位分隔符號,例如逗號)。

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 才能啟用 local-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 的詳細資訊,請參閱隨連線器包含的參考文件。