在工作中要把DataTable中的数据批量导入进MySql数据库,试过https://blog.csdn.net/kisscatforever/article/details/66476768 的方法。但是由于那个数据库没有升级所以不能用此方法。那就只能用拼接字符串的方法了,所以研究出一个用insert方法,试了以后感觉这个方法还比较高效,所以记一下
class BigDataDB_DataSave
{
/// <summary>
/// 存储进数据库
/// </summary>
/// <param name="dt">需要存储的表</param>
/// <param name="DBTableName">数据库表的名字</param>
/// <returns></returns>
public string Save2MySqlDB(DataTable dt,string DBTableName)
{
if (dt.Rows.Count < 1)
{
return "操作失败:没有可以插入的数据";
}
string sb = this.GetCommdString(dt, DBTableName);
int res = -1;
string result = "";
using (MySqlConnection con = new MySqlConnection(DB_Conn.Get_connstring()))
{
con.Open();
using (MySqlCommand cmd = new MySqlCommand(sb, con))
{
try
{
res = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
res = -1;
// Unknown column 'names' in 'field list'
result = "操作失败!" + ex.Message.Replace("Unknown column", "未知列").Replace("in 'field list'", "存在字段集合中!");
}
}
con.Close();
}
if (res > 0)
{
result = "恭喜添加成功!";
}
return result;
}
/// <summary>
/// 得到存储语句(比较高效)
/// </summary>
/// <param name="dt">需要存储的表</param>
/// <param name="DBTableName">数据库表的名字</param>
/// <returns></returns>
public string GetCommdString(DataTable dt,string DBTableName)
{
List<string> mySqlList = new List<string>();
string sb = "INSERT INTO "+ DBTableName + "(";
mySqlList.Add(sb);
sb = "";
for (int i = 0; i < dt.Columns.Count; i++)
{
sb = sb+dt.Columns[i].ColumnName + ",";
}
sb = sb.Remove(sb.LastIndexOf(','), 1);
sb = sb + ") VALUES ";
mySqlList.Add(sb);
for (int i = 0; i < dt.Rows.Count; i++)
{
sb = "(";
for (int j = 0; j < dt.Columns.Count; j++)
{
if (dt.Columns[j].ColumnName == "CFGID")
{
sb = sb+dt.Rows[i][j] + ",";
}
else
{
sb = sb + "'" + dt.Rows[i][j] + "',";
}
}
sb = sb.Remove(sb.ToString().LastIndexOf(','), 1);
sb = sb + "),";
if(i< dt.Rows.Count - 1)
{
mySqlList.Add(sb);
}
else
{
sb = sb.Remove(sb.ToString().LastIndexOf(','), 1);
sb = sb + ";";
mySqlList.Add(sb);
}
}
string str = string.Join("",mySqlList.ToArray());
return str;
}
}