如何把DataTable内的数据插入到数据库中

本文介绍了一种将DataTable中的数据批量插入Oracle数据库的方法,通过构建动态SQL语句并使用OracleCommand执行,实现了高效的数据迁移。代码示例展示了如何匹配源字段和目标字段,以及异常处理策略。

通过代码把DataTable数据库Insert到数据库中,代码如下:


        /// <summary>
        /// DataTable内的数据插入到数据库
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="sourceFields">DataTable内的字段名</param>
        /// <param name="targetFields">目标表的字段名</param>
        /// <param name="dataSource">要插入的数据</param>
        /// <returns>ture(成功)、false(失败)</returns>
        public static SystemMessage InsertData(OracleConnection conn,OracleTransaction trans, string tableName, string[] sourceFields, string[] targetFields, DataTable dataSource)
        {
            SystemMessage _msg = new SystemMessage(true);
            string sql = "insert into " + tableName + "({0}) values({1})";
            StringBuilder fields = new StringBuilder();
            StringBuilder values = new StringBuilder();
            int count = sourceFields.Length;
            for (int i = 0; i < count; i++)
            {
                fields.Append(targetFields[i]);
                values.Append(sourceFields[i]);
                if (i != count - 1)
                {
                    fields.Append(",");
                    values.Append(",");
                }
            }
            sql = sql.Replace("{0}", fields.ToString());
            values = values.Replace(",", ",:");
            sql = sql.Replace("{1}", ":" + values.ToString());

            
            try
            {
                foreach (DataRow dr in dataSource.Rows)
                {
                    OracleCommand cmdOracle = new OracleCommand(sql, conn);
                    cmdOracle.Transaction = trans;
                    cmdOracle.CommandType = CommandType.Text;
                    OracleParameter prm = null;
                    foreach (string columnName in sourceFields)
                    {
                        prm = new OracleParameter(columnName, dr[columnName]);
                        cmdOracle.Parameters.Add(prm);
                    }
                    cmdOracle.ExecuteNonQuery();
                }
                
            }
            catch (Exception e)
            {
                _msg.Message = tableName + "表数据插入失败:" + e.Message;
                _msg.Success = false;
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
            return _msg;
        }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值