Пример #1
0
        private static IDbDataParameter ReadIntoBatchParameter(IList <Entity> entities, RdbColumn column, IRawDbAccesser dba)
        {
            var parameter = dba.ParameterFactory.CreateParameter();

            parameter.ParameterName = column.Name;

            #region 对于 CLOB 类型,需要特殊处理。

            var dbType = column.Info.ColumnMeta.DataType ?? OracleDbTypeHelper.ConvertFromCLRType(column.Info.DataType);

            /*********************** 代码块解释 *********************************
             * 不再需要对 CLOB 类型特殊处理
             *
             * 这是因为:某个字段使用 CLOB 类型后,如果再使用 BatchInsert 的功能,如果数据条数较多时(1000条未再现,10000条时出现),
             * oracle.exe 会一直占用 100% CPU,而且一直运行,不再返回(目前还不知道什么原因)。
             *
             * 另外,如果不使用 OracleDbType.Clob 来标记 OracleParameter,而只是使用 DbType.String,也可以正确的运行。
             **********************************************************************/
            //bool setOracleDbTypeEx = false;
            //if (dbType == DbType.String || dbType == DbType.AnsiString)
            //{
            //    //对于 CLOB 类型,需要特殊处理。
            //    var length = column.Info.ColumnMeta.DataTypeLength;
            //    if (OracleDbTypeHelper.CLOBTypeName.EqualsIgnoreCase(length) || "MAX".EqualsIgnoreCase(length))
            //    {
            //        (parameter as OracleParameter).OracleDbTypeEx = OracleDbType.Clob;
            //        setOracleDbTypeEx = true;
            //    }
            //}
            //else if (dbType == DbType.Binary)
            //{
            //    (parameter as OracleParameter).OracleDbTypeEx = OracleDbType.Blob;
            //    setOracleDbTypeEx = true;
            //}
            //if (!setOracleDbTypeEx)
            //{
            parameter.DbType = dbType;
            //}

            #endregion

            int rowsCount  = entities.Count;
            var valueArray = new object[rowsCount] as IList;
            for (int j = 0; j < rowsCount; j++)
            {
                var entity = entities[j];
                var value  = column.ReadParameterValue(entity);
                valueArray[j] = value;
            }

            parameter.Value = valueArray;
            return(parameter);
        }
Пример #2
0
        private static IDbDataParameter ReadIntoBatchParameter(IList <Entity> entities, RdbColumn column, IRawDbAccesser dba)
        {
            var parameter = dba.ParameterFactory.CreateParameter();

            parameter.ParameterName = column.Name;
            parameter.DbType        = OracleDbTypeHelper.ConvertFromCLRType(column.Info.DataType);

            int rowsCount  = entities.Count;
            var valueArray = new object[rowsCount] as IList;

            for (int j = 0; j < rowsCount; j++)
            {
                var entity = entities[j];
                var value  = column.ReadParameterValue(entity);
                valueArray[j] = value;
            }

            parameter.Value = valueArray;
            return(parameter);
        }
Пример #3
0
        /// <summary>
        /// 获取包含指定实体类所对应列名对应属性的值参数对象
        /// </summary>
        /// <param name="entity">实体对象</param>
        /// <param name="column">列对象</param>
        /// <param name="dba"></param>
        /// <returns>返回包含参数值的对象实例</returns>
        private static IDbDataParameter GetDataParameterObject(Entity entity, RdbColumn column, IRawDbAccesser dba)
        {
            var parameter = dba.ParameterFactory.CreateParameter();

            parameter.ParameterName = column.Name;

            var dbType = column.Info.ColumnMeta.DataType ?? MySqlDbTypeHelper.ConvertFromCLRType(column.Info.DataType);

            parameter.DbType = dbType;
            parameter.Value  = column.ReadParameterValue(entity);
            return(parameter);
        }