【物流系统】——C#Oracle批量导入(三)全表匹配
来源:互联网 发布:高仿阿迪耐克衣服淘宝 编辑:程序博客网 时间:2024/05/03 17:59
前提
介于Oracle.DataAccess.dll使用问题,小编又找了一种新的替代方式,还请技术主管帮忙封装了一下,以后遇到大数据导入的时候,就再也不害怕了,哈哈。
忍不住了直接上代码了哈哈。
过程
参数赋值到sql中
private void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, string cmdText, OracleParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; cmd.BindByName = true; if (trans != null) cmd.Transaction = trans; cmd.CommandType = CommandType.Text;//cmdType; if (cmdParms != null) { foreach (OracleParameter parm in cmdParms) cmd.Parameters.Add(parm); } }导入的方法
#region 批量导入 public bool BatchImport(string SQLString, int rownum, params OracleParameter[] cmdParms) { using (OracleConnection connection = new OracleConnection(this.connectionString)) { using (OracleCommand cmd = new OracleCommand(SQLString, connection)) { try { cmd.CommandType = CommandType.Text; cmd.ArrayBindCount=rownum; this.PrepareCommand(cmd, connection, null, SQLString, cmdParms); //connection.Open(); int rows=cmd.ExecuteNonQuery(); connection.Close(); cmd.Dispose(); connection.Dispose(); return rows >= 0 ? true : false; } catch (Oracle.ManagedDataAccess.Client.OracleException E) { connection.Close(); //throw new Exception(E.Message); return false; } } } } #endregion组建参数
/// <summary> /// 组建参数用 /// </summary> /// <param name="name"></param> /// <param name="oracleType"></param> /// <param name="direction"></param> /// <param name="size"></param> /// <param name="value"></param> /// <returns></returns> public OracleParameter BuildOracleParameter(string name, OracleDbType oracleType, ParameterDirection direction, int size, object value) { OracleParameter paramerer = new OracleParameter(name, value); paramerer.ParameterName = name; paramerer.OracleDbType = oracleType; paramerer.Direction = direction; if (size > 0) { paramerer.Size = size; } return paramerer; }调用过程
#region 直接全表匹配插入+BatchGoodsDrugCode+贾文静+2017年3月9日12:44:03 public bool BatchGoodsDrugCode(List<Model.GOODS_DRUGCODE> goodDrugCodeLists) { string sql = "INSERT INTO goods_drugcode VALUES (:org_id,:goods_id,:batch_no,:valid_date,:product_date,:code,:parent_code,:Isleaf,sysdate,:create_man,:Isdelete,sysdate,:modify_man,:owner_id)"; int recc = goodDrugCodeLists.Count; string[] org_id = new string[recc]; string[] goods_id = new string[recc]; string[] batch_no = new string[recc]; string[] valid_date = new string[recc]; string[] product_date = new string[recc]; string[] code = new string[recc]; string[] parent_code = new string[recc]; string[] Isleaf = new string[recc]; string[] create_man = new string[recc]; string[] Isdelete = new string[recc]; string[] modify_man = new string[recc]; string[] owner_id = new string[recc]; for (int i = 0; i < recc; i++) { org_id[i] = goodDrugCodeLists[i].ORG_ID.ToString(); goods_id[i] = goodDrugCodeLists[i].GOODS_ID.ToString(); batch_no[i] = goodDrugCodeLists[i].BATCH_NO.ToString(); valid_date[i] = goodDrugCodeLists[i].VALID_DATE.ToString(); product_date[i] = goodDrugCodeLists[i].PRODUCT_DATE.ToString(); code[i] = goodDrugCodeLists[i].CODE.ToString(); parent_code[i] = goodDrugCodeLists[i].PARENT_CODE.ToString(); Isleaf[i] = goodDrugCodeLists[i].ISLEAF.ToString(); create_man[i] = goodDrugCodeLists[i].CREATE_MAN.ToString(); Isdelete[i] = goodDrugCodeLists[i].ISDELETED.ToString(); modify_man[i] = goodDrugCodeLists[i].MODIFY_MAN.ToString(); owner_id[i] = goodDrugCodeLists[i].OWNER_ID.ToString(); } OracleParameter[] param = { ora.BuildOracleParameter(":org_id",OracleDbType.Varchar2,ParameterDirection.Input,0,org_id), ora.BuildOracleParameter(":goods_id",OracleDbType.Varchar2,ParameterDirection.Input,0,goods_id), ora.BuildOracleParameter(":batch_no",OracleDbType.Varchar2,ParameterDirection.Input,0,batch_no), ora.BuildOracleParameter(":valid_date",OracleDbType.Varchar2,ParameterDirection.Input,0,valid_date), ora.BuildOracleParameter(":product_date",OracleDbType.Varchar2,ParameterDirection.Input,0,product_date), ora.BuildOracleParameter(":code",OracleDbType.Varchar2,ParameterDirection.Input,0,code), ora.BuildOracleParameter(":parent_code",OracleDbType.Varchar2,ParameterDirection.Input,0,parent_code), ora.BuildOracleParameter(":Isleaf",OracleDbType.Varchar2,ParameterDirection.Input,0,Isleaf), ora.BuildOracleParameter(":create_man",OracleDbType.Varchar2,ParameterDirection.Input,0,create_man), ora.BuildOracleParameter(":Isdelete",OracleDbType.Varchar2,ParameterDirection.Input,0,Isdelete), //ora.BuildOracleParameter(":modify_date",OracleDbType.Varchar2,ParameterDirection.Input,0,modify_date), ora.BuildOracleParameter(":modify_man",OracleDbType.Varchar2,ParameterDirection.Input,0,modify_man), ora.BuildOracleParameter(":owner_id",OracleDbType.Varchar2,ParameterDirection.Input,0,owner_id) }; return ora.BatchImport(sql, recc, param); } #endregion终于完美实现大量数据的直接插入,2W数据,不超过五秒,而且引用的是Oracle.ManagedDataAccess.Client,实施起来也比较方便。效率也非常可观。
问题
正在小编嘚瑟的时候,组长说了一句话,心都塞了。如果在数据表上添加字段有影响吗,需要改程序吗?
这个小编先说一句啊,这个方法是对表中全部字段匹配,在sql语句insert需要写所有的字段,否则会提示错误。所以这样的弊端就是每当数据表结构改变,程序也需要改变,真是不够灵活的!!!
所以当组长说到这个问题时候,我才开始考虑,修改表结构的问题。无奈,这次又不是很完美。好在数据表结构不经常改变,所以还可以正常使用。
总结
做程序的时候啊,还是要多多考虑啊,灵活性啊,效率啊,一定要综合考虑啊。批量导入到此结束,三种方式,根据情况自由选择吧。
0 0
- 【物流系统】——C#Oracle批量导入(三)全表匹配
- 【物流系统】——C#Oracle批量导入(二)OracleBulkCopy
- 【物流系统】——C#中Oracle批量导入(一)
- 项目整理(三)——物流
- 【物流系统】——C#解析XML
- Oracle 批量导入Sequence
- Oracle批量数据导入
- oracle批量导入测试数据
- Mybatis+oracle 批量导入
- Oracle批量导入数据
- Oracle批量导入数据
- Mybatis Oracle 批量导入
- ORACLE批量导入
- C#---批量导入数据库
- Oracle数据库全表导入导出
- 北京络捷斯特物流系统(三)
- oracle全库导入
- 处理一次物流系统mysql大并发全表扫描SQL增加索引的过程
- AndroidStudio无法下载Grandle的解决方案
- java设计模式学习之适配器模式
- C# chart控件
- php_memcache.dll 5.2-5.6 全版本
- 如何建造一个简单的手机信息页面
- 【物流系统】——C#Oracle批量导入(三)全表匹配
- 【上机笔试之二】冒泡排序
- 白盒测试详解
- Leetcode Longest Substring Without Repeating Characters Python的失败实现与学习
- AndroidManifest
- MYSQL入门基础:数据库规则Rule
- Android程序员学PHP开发(38)-ThinkPHP5.0(10)后台操作数据库(1)插入-phpStudy+Sublime
- HDU2444The Accomodation of Students(二分图判断+最大匹配)
- 推荐JAVA学习路线