比较高效率的将DataTable导入进MySQL

在工作中要把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;
        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值