odp 加固 mysql 代码_ODP方式,大批量数据写入ORACLE数据库
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数据库相关推荐
- odp 加固 mysql 代码_将数组绑定到 ODP.NET 数据库命令
在阅读此方法文档后,您应能够: 使用 ODP.NET 调用数据库存储过程 使用 ODP.NET 的数组绑定功能 前提假设读者熟悉 Visual Studio.NET,还了解 ODP.NET 和数据库的 ...
- 使用cx_Oracle将数据写入Oracle数据库
一.最简单方法(插入单条数据) #encoding=utf-8 # python2.7import cx_Oracle import timedef save_data():try:db = cx_O ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- mysql外部表不是预期格式_批量Excel数据导入Oracle数据库 导入excel错误:外部表不是预期的格式 解决方案...
在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一下,导出的Excel是标准文件不是html,没错 ...
- 批量Excel数据导入Oracle数据库
由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...
- oracle两个表数据比较,oracle数据库两表数据比较
1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...
- 查询oracle数据库的表格数据类型,excel表格中如何查询数据库数据类型-我想把excel表格中的数据导入oracle数据库中,想在......
在excel表里,什么是:字段.记录.数据类型.多工... declare @t table(id numeric(18,2)) insert into @t SELECT col1 FROM ...
- FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG
发现FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG,提交的表名大小写是敏感的. 只要有一个表名字母的大小写不匹配,ORACLE就会认为是一个不认 ...
- 用ado把excel数据写入oracle,如何将excel表格数据导入到oracle数据库对应的表中?!oracle导出excel文件...
如何把excel里的表导入到oracle里 使用第三方工具吧,toad之类的 一个excel表格中有多个sheet,如何将其导入oracle数据库 户和要用DBA 最简单得建用户: create us ...
最新文章
- Inception GoogLeNet
- VS2008中自定义C++工程模板与修改新建文件默认编码的办法
- NgRx使用CreateSelector组装复合Selector
- 如何用python创建文件_如何使用Python创建新的文本文件
- 1.5 编程基础之循环控制 05 最高的分数
- 为什么遇见逆水寒服务器维修,《遇见逆水寒》4月23日更新公告
- 求剁手的分享,如何简单开发js图表
- 狂神说shiro案例源码
- CATIA汽车焊装夹具设计基础入门视频教程
- 史上最全——QQ秘籍之全攻略
- 新手零基础:飞桨代码中关于图片路径读取和资源解压报错
- ShaderJoy —— “水面波纹消散” 的实现 【GLSL】
- 如何一键去除Word文件中的水印
- python预测体彩大乐透
- WifiManager详解
- java计算机毕业设计校园快递联盟系统源码+系统+mysql数据库+lw文档
- Life -- MY REAL LIFE
- ES系列四、ES6.3常用api之文档类api
- QT学习笔记--QMainWindow菜单栏、工具栏
- 如何用副业搞垮一个打工人?
热门文章
- 论文笔记 ACL 2021|Low-resource Event Detection with Ontology Embedding
- w ndows 10画图,网友“羞辱”Windows 10界面设计:用画图 10分钟搞定!
- C语言复制文本文件(功能)
- 腾讯云服务器标准型SA2详细情况
- 基于java开发的健身器材电商管理系统.rar(含项目源码前后端项目)
- 研发转FAE,要想清楚
- 微信小程序|基于小程序+C#制作一个聊天系统
- 图像处理(七)——图像复原
- 乘WEB 2.0漫游虚拟太空
- Python中range和xrange有何区别