MySQLBulkLoader没有在mysql db中插入任何行

时间:2013-09-03 19:19:05

标签: c# mysql bulkloader

   var bl = new MySqlBulkLoader(mycon);
            bl.TableName = "tblspmaster";
            bl.FieldTerminator = ",";
            bl.LineTerminator = "\r\n";
            bl.FileName = "E://31october//SP//sp_files_sample1//400k sp00 6-19 E.csv";
            bl.NumberOfLinesToSkip = 1;

            var inserted = bl.Load();

我正在使用此代码在db中上传csv文件,但它没有抛出任何异常并且插入的内容始终显示为零。

已经安装了mysql的dotnetconnector,并且还添加了引用。

2 个答案:

答案 0 :(得分:1)

最后我使用了这段代码并为我工作

string sql = @"load data infile 'E:/a1.csv' ignore into table tblspmaster fields terminated by '' enclosed by '' lines terminated by '\n' IGNORE 1 LINES (sp)";
 MySqlCommand cmd = new MySqlCommand(sql, mycon); 
cmd.CommandTimeout = 5000000; 
cmd.ExecuteNonQuery();

答案 1 :(得分:0)

如果您的csv文件和mysql表列不匹配,则可能不会插入数据。 例如,如果您的mysql表具有带有身份密钥的主键列,并且通常您不会在csv文件中包含此列。

因此,在上述情况下,mysqlloader将不会插入数据。 为了解决这个问题,使用columns属性并添加mysql表的列名

这是示例代码。

public async Task<bool> MySqlBulkLoaderAsync(string csvFilePath)
    {
        bool result = true;
        try
        {
            using (var conn = new MySqlConnection(_connString + ";AllowLoadLocalInfile=True"))
            {
                var bl = new MySqlBulkLoader(conn)
                {
                    TableName = "patientdetailstagings",
                    Timeout = 600,
                    FieldTerminator = ",",
                    LineTerminator = "\n",
                    FieldQuotationCharacter = '"',
                    FileName = csvFilePath,
                    NumberOfLinesToSkip = 1
                };
                bl.Columns.AddRange(new List<string>() {"Column1", "Column2"});
                var numberOfInsertedRows = await bl.LoadAsync();
            }
            System.IO.File.Delete(csvFilePath);
        }
        catch (Exception ex)
        {
            result = false;
            throw;
        }
        return result;
    }

注意:列映射将根据您在columns属性中添加它们的方式完成。 以相同的顺序,它将从csv文件访问列值