1 ODP_Inserter2 {3 ///

4 ///数据库连接串5 ///

6 private string strWMSConn = string.Empty;7

8 public stringStrWMSConn9 {10 get

11 {12 if (strWMSConn == string.Empty)13 {14 returnGetConnectionString();15 }16 else

17 {18 returnstrWMSConn;19 }20 }21 }22

23 ///

24 ///构造函数25 ///

26 publicOracleAccessBatcher()27 {28 //加载数据库连接串

29 if (strWMSConn == string.Empty)30 {31 GetConnectionString();32 }33 }34

35 ///

36 ///加载数据库连接串37 ///

38 private stringGetConnectionString()39 {40 System.Configuration.AppSettingsReader reader = newSystem.Configuration.AppSettingsReader();41 strWMSConn = reader.GetValue("B2BDataBase", typeof(string)).ToString();42 returnstrWMSConn;43 }44

45 ///

46 ///批量插入数据47 ///

48 /// 目的表名称

49 /// 数据源(列名与目的表一致)

50 ///

51 public void BatchInsert(stringtableName, DataTable dataTable)52 {53 if (string.IsNullOrEmpty(tableName))54 {55 throw new ArgumentNullException("tableName", "必须指定批量插入的表名称");56 }57

58 if (dataTable == null || dataTable.Rows.Count < 1)59 {60 throw new ArgumentException("必须指定批量插入的数据源", "dataTable");61 }62

63 using (OracleConnection conn = newOracleConnection(strWMSConn))64 {65 try

66 {67 conn.Open();68

69 using (OracleCommand cmd =conn.CreateCommand())70 {71 //绑定批处理的行数

72 cmd.ArrayBindCount =dataTable.Rows.Count;73 cmd.BindByName = true;74 cmd.CommandType =CommandType.Text;75 cmd.CommandText =GenerateInsertSql(cmd, tableName, dataTable);76 cmd.CommandTimeout = 600; //10分钟

77

78 cmd.ExecuteNonQuery();79 }80 }81 catch(Exception exp)82 {83 throwexp;84 }85 finally

86 {87 conn.Close();88 }89 }90

91 }92

93 ///

94 ///批量更新数据95 ///

96 /// 目的表名

97 /// 条件列名数组(值与目的表列名一致)

98 /// 数据源(列名与目的表一致)

99 ///

100 public int BatchUpdate(string tableName, string[] keyColumns, DataTable dataTable)101 {102 //检查输入

103 if (string.IsNullOrEmpty(tableName))104 {105 throw new ArgumentNullException("tableName", "必须指定批量更新的表名称");106 }107

108 if (keyColumns == null || keyColumns.Length == 0)109 {110 throw new ArgumentException("必须指定批量更新表的条件列数组", "keyColumns");111 }112

113 if (dataTable == null || dataTable.Rows.Count < 1)114 {115 throw new ArgumentException("必须指定批量更新的数据源", "dataTable");116 }117

118 //无需更新

119 if (keyColumns.Length >=dataTable.Columns.Count)120 {121 throw new ArgumentException("目的表不存在需要更新的列名", "keyColumns&dataTable");122 }123

124 //条件列是否在表列名中

125 foreach (string colName inkeyColumns)126 {127 if (!dataTable.Columns.Contains(colName))128 {129 throw new ArgumentException("用于更新条件的列名不在目的表中", "dataTable");130 }131 }132

133 int iResult = 0;134 using (OracleConnection conn = newOracleConnection(strWMSConn))135 {136 try

137 {138 conn.Open();139

140 using (OracleCommand cmd =conn.CreateCommand())141 {142 //绑定批处理的行数

143 cmd.ArrayBindCount =dataTable.Rows.Count;144 cmd.BindByName = true;145 cmd.CommandType =CommandType.Text;146 cmd.CommandText =GenerateUpdateSql(cmd, tableName, keyColumns, dataTable);147 cmd.CommandTimeout = 600; //10分钟

148

149 iResult =cmd.ExecuteNonQuery();150 }151 }152 catch(Exception exp)153 {154 throwexp;155 }156 finally

157 {158 conn.Close();159 }160 }161

162 returniResult;163 }164

165 ///

166 ///批量删除167 ///

168 /// 目标表

169 /// 列名(与目的表列名一致)

170 /// 列值

171 public void BatchDelete(string tableName, string columnName, stringcolumnValue)172 {173 //检查输入

174 if (string.IsNullOrEmpty(tableName))175 {176 throw new ArgumentNullException("tableName", "必须指定批量更新的表名称");177 }178

179 if (string.IsNullOrEmpty(columnName))180 {181 throw new ArgumentNullException("columnValue", "必须指定删除条件的列名");182 }183

184 string strCmdText = string.Format("delete from {0} where {1} = '{2}'", tableName, columnName, columnValue);185

186 using (OracleConnection conn = newOracleConnection(strWMSConn))187 {188 try

189 {190 conn.Open();191

192 using (OracleCommand cmd =conn.CreateCommand())193 {194 //绑定批处理的行数195 //cmd.ArrayBindCount = dataTable.Rows.Count;

196 cmd.BindByName = true;197 cmd.CommandType =CommandType.Text;198 cmd.CommandText =strCmdText;199 cmd.CommandTimeout = 600; //10分钟

200

201 cmd.ExecuteNonQuery();202 }203 }204 catch(Exception exp)205 {206 throwexp;207 }208 finally

209 {210 conn.Close();211 }212 }213 }214

215 ///

216 ///生成插入数据的sql语句217 ///

218 /// SQL命令

219 /// 目的表名称

220 /// 目的表数据

221 ///

222 private string GenerateInsertSql(OracleCommand command, stringtableName, DataTable table)223 {224 int cols =table.Columns.Count;225 int rows =table.Rows.Count;226

227 StringBuilder names = newStringBuilder();228 StringBuilder values = newStringBuilder();229

230 for (int i = 0; i < cols; i++)231 {232 DataColumn column =table.Columns[i];233 OracleParameter param = new OracleParameter(column.ColumnName, this.GetOracleDbType(column.DataType));234 //OracleParameter param = new OracleParameter(column.ColumnName, OracleDbType.Varchar2);

235

236 string[] data = new string[rows];237 for (int j = 0; j < rows; j++)238 {239 data[j] =table.Rows[j][column.ColumnName].ToString().TrimEnd();240 }241

242 param.Direction =ParameterDirection.Input;243 param.Value =data;244 command.Parameters.Add(param);245

246 if (names.Length > 0)247 {248 names.Append(",");249 values.Append(",");250 }251 names.AppendFormat("{0}", column.ColumnName);252 values.AppendFormat("{0}{1}", ":", column.ColumnName);253 }254 return string.Format("INSERT INTO {0}({1}) VALUES ({2})", tableName, names, values);255 }256

257 ///

258 ///生成更新数据的sql语句259 ///

260 ///

261 ///

262 ///

263 ///

264 ///

265 private string GenerateUpdateSql(OracleCommand command, string tableName, string[] keyColumns, DataTable table)266 {267 int cols =table.Columns.Count;268 int rows =table.Rows.Count;269

270 StringBuilder sets = newStringBuilder();271 StringBuilder wheres = newStringBuilder();272

273 for (int i = 0; i < cols; i++)274 {275 DataColumn column =table.Columns[i];276

277 //是否为条件列

278 bool isCond = false;279 foreach (string cod inkeyColumns)280 {281 isCond =cod.Equals(column.ColumnName);282 if(isCond)283 {284 break;285 }286 }287

288

289 string[] data = new string[rows];290 for (int j = 0; j < rows; j++)291 {292 data[j] =table.Rows[j][column.ColumnName].ToString().TrimEnd();293 }294

295 //设定参数

296 OracleParameter param;297 OracleDbType dbType =OracleDbType.Varchar2;298

299 dbType = this.GetOracleDbType(column.DataType);300 param = newOracleParameter(column.ColumnName, dbType);301 param.Direction =ParameterDirection.Input;302 param.Value =data;303 command.Parameters.Add(param);304

305 //条件列

306 if(isCond)307 {308 if (wheres.Length > 0)309 {310 wheres.Append("and");311 }312

313 wheres.AppendFormat("{0} = :{0}", column.ColumnName);314 }315 else

316 {317 if (sets.Length > 0)318 {319 sets.Append(",");320 }321 sets.AppendFormat("{0} = :{0}", column.ColumnName);322 }323 }324 return string.Format("update {0} set {1} where {2}", tableName, sets, wheres);325 }326

327 ///

328 ///根据数据类型获取OracleDbType329 ///

330 ///

331 ///

332 private OracleDbType GetOracleDbType(objectvalue)333 {334 //OracleDbType dataType = OracleDbType.Object;

335 OracleDbType dataType =OracleDbType.Varchar2;336

337 if (value is string)338 {339 dataType =OracleDbType.Varchar2;340 }341 else if (value isDateTime)342 {343 dataType =OracleDbType.TimeStamp;344 }345 else if (value is int || value is short)346 {347 dataType =OracleDbType.Int32;348 }349 else if (value is long)350 {351 dataType =OracleDbType.Int64;352 }353 else if (value is decimal || value is double)354 {355 dataType =OracleDbType.Decimal;356 }357 else if (value isGuid)358 {359 dataType =OracleDbType.Varchar2;360 }361 else if (value is bool || value isBoolean)362 {363 dataType =OracleDbType.Byte;364 }365 else if (value is byte[])366 {367 dataType =OracleDbType.Blob;368 }369 else if (value is char)370 {371 dataType =OracleDbType.Char;372 }373

374 returndataType;375 }376

377 ///

378 ///执行SQL379 ///

380 ///

381 public void ExecuteSql(stringstrSql)382 {383 using (OracleConnection conn = newOracleConnection(strWMSConn))384 {385 try

386 {387 conn.Open();388

389 using (OracleCommand cmd =conn.CreateCommand())390 {391 cmd.BindByName = true;392 cmd.CommandType =CommandType.Text;393 cmd.CommandText =strSql;394 cmd.CommandTimeout = 600;395

396 cmd.ExecuteNonQuery();397 }398 }399 catch(Exception exp)400 {401 throwexp;402 }403 finally

404 {405 conn.Close();406 }407 }408 }409 }

odp 加固 mysql 代码_ODP方式,大批量数据写入ORACLE数据库相关推荐

  1. odp 加固 mysql 代码_将数组绑定到 ODP.NET 数据库命令

    在阅读此方法文档后,您应能够: 使用 ODP.NET 调用数据库存储过程 使用 ODP.NET 的数组绑定功能 前提假设读者熟悉 Visual Studio.NET,还了解 ODP.NET 和数据库的 ...

  2. 使用cx_Oracle将数据写入Oracle数据库

    一.最简单方法(插入单条数据) #encoding=utf-8 # python2.7import cx_Oracle import timedef save_data():try:db = cx_O ...

  3. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

  4. mysql外部表不是预期格式_批量Excel数据导入Oracle数据库 导入excel错误:外部表不是预期的格式 解决方案...

    在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一下,导出的Excel是标准文件不是html,没错 ...

  5. 批量Excel数据导入Oracle数据库

    由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...

  6. oracle两个表数据比较,oracle数据库两表数据比较

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...

  7. 查询oracle数据库的表格数据类型,excel表格中如何查询数据库数据类型-我想把excel表格中的数据导入oracle数据库中,想在......

    在excel表里,什么是:字段.记录.数据类型.多工... declare @t table(id numeric(18,2)) insert into @t SELECT   col1 FROM   ...

  8. FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG

    发现FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG,提交的表名大小写是敏感的. 只要有一个表名字母的大小写不匹配,ORACLE就会认为是一个不认 ...

  9. 用ado把excel数据写入oracle,如何将excel表格数据导入到oracle数据库对应的表中?!oracle导出excel文件...

    如何把excel里的表导入到oracle里 使用第三方工具吧,toad之类的 一个excel表格中有多个sheet,如何将其导入oracle数据库 户和要用DBA 最简单得建用户: create us ...

最新文章

  1. Inception GoogLeNet
  2. VS2008中自定义C++工程模板与修改新建文件默认编码的办法
  3. NgRx使用CreateSelector组装复合Selector
  4. 如何用python创建文件_如何使用Python创建新的文本文件
  5. 1.5 编程基础之循环控制 05 最高的分数
  6. 为什么遇见逆水寒服务器维修,《遇见逆水寒》4月23日更新公告
  7. 求剁手的分享,如何简单开发js图表
  8. 狂神说shiro案例源码
  9. CATIA汽车焊装夹具设计基础入门视频教程
  10. 史上最全——QQ秘籍之全攻略
  11. 新手零基础:飞桨代码中关于图片路径读取和资源解压报错
  12. ShaderJoy —— “水面波纹消散” 的实现 【GLSL】
  13. 如何一键去除Word文件中的水印
  14. python预测体彩大乐透
  15. WifiManager详解
  16. java计算机毕业设计校园快递联盟系统源码+系统+mysql数据库+lw文档
  17. Life -- MY REAL LIFE
  18. ES系列四、ES6.3常用api之文档类api
  19. QT学习笔记--QMainWindow菜单栏、工具栏
  20. 如何用副业搞垮一个打工人?

热门文章

  1. 论文笔记 ACL 2021|Low-resource Event Detection with Ontology Embedding
  2. w ndows 10画图,网友“羞辱”Windows 10界面设计:用画图 10分钟搞定!
  3. C语言复制文本文件(功能)
  4. 腾讯云服务器标准型SA2详细情况
  5. 基于java开发的健身器材电商管理系统.rar(含项目源码前后端项目)
  6. 研发转FAE,要想清楚
  7. 微信小程序|基于小程序+C#制作一个聊天系统
  8. 图像处理(七)——图像复原
  9. 乘WEB 2.0漫游虚拟太空
  10. Python中range和xrange有何区别