sql语句批量修改数据 oracle,Oracl 一条sql语句 批量添加、修改数据,oraclsql

Oracl 一条sql语句 批量添加、修改数据,oraclsql

最近一直在用,也一直在学oralc,项目上也用到了批量的添加(读取上传CSV文件信息,把符合条件的信息写入到数据库中),在写的时候想到了可能是数据量大就想该怎么快,(由于本人在.NET开发期间没有做过深度的优化)

1 private string GUID;//序号GUID唯一标识

2 private string filename;//文件名称

3 private string lmportl_ID;//导入ID

4 private Int32? lmportl_date;//导入时间

5 private string diflag;//国际/国内标识 DIFlag

上传CSV文件有专门的方法,只要复制进去就好了

#region 将CSV文件的数据读取到DataTable中

///

///将CSV文件的数据读取到DataTable中///

/// CSV文件路径

/// 返回读取了CSV数据的DataTable

public static DataTable OpenCSV(stringfilePath)

{

DataTable dt= newDataTable();

FileStream fs= newFileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);

StreamReader sr= newStreamReader(fs, Encoding.UTF8);//StreamReader sr = new StreamReader(fs, encoding);//string fileContent = sr.ReadToEnd();//记录每次读取的一行记录

string strLine = "";//记录每行记录中的各字段内容

string[] aryLine = null;string[] tableHead = null;//标示列数

int columnCount = 0;//标示是否是读取的第一行

bool IsFirst = true;//逐行读取CSV中的数据

while ((strLine = sr.ReadLine()) != null)

{if (IsFirst == true)

{

tableHead= strLine.Split(',');if (tableHead.Length > 3)//截取列数

tableHead = tableHead.Skip(0).Take(3).ToArray();

IsFirst= false;

columnCount=tableHead.Length;//创建列

for (int i = 0; i < columnCount; i++)

{

tableHead[i]= tableHead[i].Replace("\"", "");

DataColumn dc= newDataColumn(tableHead[i]);

dt.Columns.Add(dc);

}

}else{

aryLine= strLine.Split(',');if (aryLine.Length > 3)

aryLine= aryLine.Skip(0).Take(3).ToArray();

DataRow dr=dt.NewRow();//是否超过1000行

if (dt.Rows.Count <= 1000)

{//Prefix和FormType字符串长度是否超过3

if (aryLine[0].Length <= 3 && aryLine[1].Length <= 3)

{

dr[0] = aryLine[0].Replace("\"", "");

dr[1] = aryLine[1].Replace("\"", "");

}else{

dr[0] = aryLine[0].Substring(0, 3);

dr[1] = aryLine[1].Substring(0, 3);

}//TicketNo 字符串长度是否超过8

if (aryLine[2].Length <= 8)

{

dr[2] = aryLine[2].Replace("\"", "");

}else{

dr[2] = aryLine[2].Substring(0, 8);

}

}else{return dt;//跳出程序,行数大于1000,不做添加,

}

dt.Rows.Add(dr);

}

}if (aryLine != null && aryLine.Length > 0)

{

dt.DefaultView.Sort= tableHead[2];

}

sr.Close();

fs.Close();returndt;

}#endregion

上传完成的CSV文件返回的DataTable  我需要把DataTable 转货成List,我们用的EF所以可以直接转换

DataEnt = DataConvertor.GetEntityList(dtb) as List;

把List传入方法中

#region 插入票号转换数据到表

///

///插入票号转换数据到表///

/// 表的实体

///

public BaseEntityJsonObject Insert_TRANSFER(ListT)

{

BaseEntityJsonObject result = new BaseEntityJsonObject();int count = 0;string strSql = "";try{

StringBuilder strBuilder= newStringBuilder();

strBuilder.Append("INSERT INTO 表名( 字段明,字段明,字段明)");

strBuilder.Append("select sequence_name.nextval ,t.c1,t.c2,t.c3,t.c4,t.c5 FROM (");foreach (var item inT)

{

strBuilder.Append("SELECT");

strBuilder.Append("'" + item.字段名+ "'C1,'" + item.字段名+ "'C2,'" + item.字段名+ "' C3,");

strBuilder.Append("'字段名' C4 ,'" + 字段名+ "' C5 FROM DUAL union all");

}

strBuilder.Append(") T");

strSql= string.Format(strBuilder.ToString());int i = 14;//sql写完后这里嘚坐sql的截取,要不然会报错

strSql = strSql.Remove(strSql.Length - i, 11);

count=DbContext.Database.ExecuteSqlCommand(strSql);

}catch(Exception ex)

{

ExceptionHandler.HandleException(ex);

}returnresult;

}#endregion

这就是添加!

下面写批量修改

写修改前先要把要修稿的数据查询出来,转货成LIst,我就不说怎么查询,怎么转货List了

我这里写的流程是先把List写进数据库的视图中,然后数据插进伪表中 然后根据伪表中的数据做进一步的条件,不说了,直接上代码

#region 修改转换数据到表

///

///修改转换数据到表///

/// 表的实体

///

public BaseEntityJsonObject Update_TRANSFER(ListT)

{

BaseEntityJsonObject result = new BaseEntityJsonObject();int count = 0;string strSql = "";try{

StringBuilder strBuilder= newStringBuilder();

strBuilder.Append("MERGE INTO TRT_TICKETNUMBER_TRANSFER T1 USING (");//从这里循环要修改的数据,把数据先临时放到伪表中

foreach (var item int)

{

strBuilder.Append("SELECT '" + item.要修改的字段名+ "' a, '" + item.要修改的字段名+ "' b FROM DUAL t");

strBuilder.Append("union all");

}string str2 =strBuilder.ToString();if (str2 != "")

{

str2= str2.Remove(str2.Length - 10);

}//把sql进行截取,要不然会报错,然后在拼接SQL语句

StringBuilder strBuilder2= newStringBuilder();

strBuilder2.Append(") T2 ON ( T1.表中的主键字段 = T2.a 临时表的字段 )");

strBuilder2.Append("WHEN MATCHED THEN");

strBuilder2.Append("UPDATE SET T1.需要修改的字段名 = t2.b");

strSql= str2 +strBuilder2.ToString();

count=DbContext.Database.ExecuteSqlCommand(strSql);

result.payload=count;

result.errorCode= 0;

}catch(Exception ex)

{

ExceptionHandler.HandleException(ex);

LogHelper.Error(string.Format("添加表数据失败"), ex);

}returnresult;

}#endregion

这样就完成了数据的修改,

由于临时想起来写博客,没有准备充分,

有什么不妥的欢迎大家指出,欢迎大家吧问题指出来,然后大家共同进步

http://www.dengb.com/oracle/1233218.htmlwww.dengb.comtruehttp://www.dengb.com/oracle/1233218.htmlTechArticleOracl 一条sql语句 批量添加、修改数据,oraclsql 最近一直在用,也一直在学oralc,项目上也用到了批量的添加(读取上传CSV文件信息,把符合...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值