mysql ef批量添加数据_Mysql EF 数据录入&批量数据录入

本文介绍了两种在MySQL中使用EF进行数据批量插入的方法:一是通过逐条录入,二是利用SqlBulkCopyByDatatable函数批量插入数据。此外,还提到了通过生成CSV文件并使用MySqlBulkLoader导入数据的方式。
摘要由CSDN通过智能技术生成

逐条录入数据

///

/// 一条条进行数据录入

///

///

///

///

private static int InsertDataTable(string tableName, DataTable dt)

{

//循环列,循环每行,执行insert sql语句

string colStr = "";

List col = new List();

foreach (DataColumn column in dt.Columns)

{

col.Add(column.ColumnName);

colStr += $"`{column.ColumnName}`,";

}

colStr = colStr.TrimEnd(',');

var totalCount = 0;

foreach (DataRow dr in dt.Rows)

{

string val = "";

foreach (var columnName in col)

{

val += $"\"{dr[columnName]}\",";

}

val = val.TrimEnd(',');

//这里可以使用MySqlParameter

string sql = $"insert into `{tableName}`({colStr}) values({val})";

totalCount+= ExecuteNonQuery(sql, null);

}

return totalCount;

}

拼接sql录入

///

/// 批量数据录入

///

///

///

public static void SqlBulkCopyByDatatable(string tableName, DataTable dt)

{

try

{

//循环列,循环每行,执行insert sql语句

//一次提交500条记录

var maxSingleCount = 500;

//本次录入的数据条数

var singleCount = 0;

var totalCount = 0;

//总共需要录入的数据条数

var recordCount = dt.Rows.Count;

string colStr = "";

List col = new List();

foreach (DataColumn column in dt.Columns)

{

col.Add(column.ColumnName);

colStr += $"`{column.ColumnName}`,";

}

colStr = colStr.TrimEnd(',');

var valueStr = "";

foreach (DataRow dr in dt.Rows)

{

string val = "";

foreach (var columnName in col)

{

val += $"\"{dr[columnName]}\",";

}

val = val.TrimEnd(',');

//https://blog.csdn.net/atgc/article/details/2039672

valueStr += $"({val}),";

singleCount++;

totalCount++;

//满足maxSingleCount条数据,或者到达最后一条数据,则录入

if (singleCount >= maxSingleCount || totalCount >= recordCount)

{

singleCount = 0;

valueStr = valueStr.TrimEnd(',');

//insert into table(columns) values(value1),(value2),.....(valuen);

string sql = $"insert into `{tableName}`({colStr}) values{valueStr}";

ExecuteNonQuery(sql, null);

valueStr = "";

}

}

}

catch (Exception ex)

{

throw ex;

}

}

公共方法

private static int ExecuteNonQuery(string sql, IEnumerable parameters = null)

{

int n = 0;

using (var cmd = new MySqlCommand(sql, connection))

{

//事务

//https://www.cnblogs.com/lhyqzx/p/6440959.html

var sqlTransaction = connection.BeginTransaction();

cmd.Transaction = sqlTransaction;

if (parameters != null)

{

foreach(var p in parameters)

{

cmd.Parameters.Add(p);

}

}

try

{

n = cmd.ExecuteNonQuery();

sqlTransaction.Commit();

}

catch(Exception ex)

{

sqlTransaction.Rollback();

throw ex;

}

}

return n;

}

通过生成文件导入数据库

mysql支持把csv文件倒入到数据库

生成csv文件的时候,不需要特别生成一行头文件,每行生成的数据直接用 ',' 分隔就行,一行代表数据库的一条记录,所以生成csv文件时候,注意数据的顺序

MySqlBulkLoader bulk = new MySqlBulkLoader(connection)

{

FieldTerminator = ",",//这个地方字段间的间隔方式,为逗号

FieldQuotationCharacter = '"',

EscapeCharacter = '"',

LineTerminator = "\r\n",//每行

FileName = filePath,//文件地址

NumberOfLinesToSkip = 0,

TableName = tableName,

};

bulk.Load();

示例代码

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值