zoukankan      html  css  js  c++  java
  • 一个ORALCE快速批量写入方法的类

        public class OracleBatchInsertUtil
        {
            /// <summary>
            ///  批量插入数据  
            /// </summary>
            /// <param name="tableName">表名称  </param>
            /// <param name="columnRowData">键-值存储的批量数据:键是列名称,值是对应的数据集合</param>
            /// <param name="conStr">连接字符串</param>
            /// <param name="len">每次批处理数据的大小</param>
            /// <returns></returns>
            public static int BatchInsert(string tableName, Dictionary<string, object> columnRowData, string conStr, int len)
            {
                if (string.IsNullOrEmpty(tableName))
                {
                    throw new ArgumentException("必须指定批量插入的表名称", "tableName");
                }
    
                if (columnRowData == null || columnRowData.Count < 1)
                {
                    throw new ArgumentException("必须指定批量插入的字段名称", "columnRowData");
                }
    
                int iResult = 0;
                string[] dbColumns = columnRowData.Keys.ToArray();
                StringBuilder sbCmdText = new StringBuilder();
                if (columnRowData.Count > 0)
                {
                    //准备插入的SQL  
                    sbCmdText.AppendFormat("INSERT INTO {0}(", tableName);
                    sbCmdText.Append(string.Join(",", dbColumns));
                    sbCmdText.Append(") VALUES (");
                    sbCmdText.Append(":" + string.Join(",:", dbColumns));
                    sbCmdText.Append(")");
    
                    using (OracleConnection conn = new OracleConnection(conStr))
                    {
                        using (OracleCommand cmd = conn.CreateCommand())
                        {
                            //绑定批处理的行数  
                            cmd.ArrayBindCount = len;
                            cmd.BindByName = true;
                            cmd.CommandType = CommandType.Text;
                            cmd.CommandText = sbCmdText.ToString();
                            cmd.CommandTimeout = 600;//10分钟  
    
                            //创建参数  
                            OracleParameter oraParam;
                            List<IDbDataParameter> cacher = new List<IDbDataParameter>();
                            foreach (string colName in dbColumns)
                            {
                                var dbType = GetOracleDbType(columnRowData[colName]);
                                oraParam = new OracleParameter(colName, dbType);
                                oraParam.Direction = ParameterDirection.Input;
                                oraParam.OracleDbTypeEx = dbType;
    
                                oraParam.Value = columnRowData[colName];
                                cmd.Parameters.Add(oraParam);
                            }
                            //打开连接  
                            conn.Open();
    
                            /*执行批处理*/
                            var trans = conn.BeginTransaction();
                            try
                            {
                                cmd.Transaction = trans;
                                iResult = cmd.ExecuteNonQuery();
                                trans.Commit();
                            }
                            catch (Exception ex)
                            {
                                trans.Rollback();
                                throw ex;
                            }
                            finally
                            {
                                if (conn != null) conn.Close();
                            }
    
                        }
                    }
                }
                return iResult;
            }
    
            /// <summary>
            /// 据数据类型获取OracleDbType  
            /// </summary>
            /// <param name="value"></param>
            /// <returns></returns>
            private static OracleDbType GetOracleDbType(object value)
            {
                if (value is string[])
                    return OracleDbType.Varchar2;
                else if (value is DateTime[])
                    return OracleDbType.TimeStamp;
                else if (value is DateTime?[])
                    return OracleDbType.TimeStamp;
                else if (value is int[] || value is short[])
                    return OracleDbType.Int32;
                else if (value is long[])
                    return OracleDbType.Int64;
                else if (value is decimal[] || value is double[] || value is float[])
                    return OracleDbType.Decimal;
                else if (value is Guid[])
                    return OracleDbType.Varchar2;
                else if (value is bool[] || value is Boolean[])
                    return OracleDbType.Byte;
                else if (value is byte[])
                    return OracleDbType.Blob;
                else if (value is char[])
                    return OracleDbType.Char;
                else
                    return OracleDbType.Varchar2;
            }
        }
    

      

  • 相关阅读:
    迭代器模式(Iterator)
    原型模式(Prototype)
    生成器模式(Builder)
    策略模式(Strategy)
    访问者模式(Visitor)
    桥接模式(Bridge)
    命令模式(Command)
    工厂方法模式(Factory Method)
    解决在Win7下安装MyGeneration,不能使用的问题
    Nhibernate拒绝配置文件(NHibernate.Mapping.Attributes的使用)
  • 原文地址:https://www.cnblogs.com/saving/p/11170717.html
Copyright © 2011-2022 走看看