注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

网易考拉推荐

007 oracle批量插入datatable数据  

2011-12-02 14:01:17|  分类: ORACLE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近想起批量插入数据的事情,之前是根据datatable的行数(n行)通过构建SQL语句导入数据库,这种方法会组成n条sql语句,并且是一行行插入的,效率不好。查询资料发现可以使用OracleDataAdapter来批量插入datatable数据。

参数:sdt:datatable数据源,sql:目标表的查询语句

    Public Function CreateCmdsAndUpdate(ByVal sdt As DataTable, ByVal sql As String) As Boolean
        Try
            Dim cmd As OracleCommand = New OracleCommand(sql, Conn)
            Dim adp As OracleDataAdapter = New OracleDataAdapter(cmd)
            Dim cb As OracleCommandBuilder = New OracleCommandBuilder(adp)
            adp.UpdateBatchSize = 200
            adp.Update(sdt.Copy)

            Return True
        Catch e As Exception
             Return False
        End Try
    End Function

要注意datatable列的名称和类型必须要和目标表的查询列一致,否则会发生错误,但列的先后顺序不作要求。
举例:架设dtTable是一个datatable表,有四列,YEARM年月,CUSTID客户,ORDERNUM订单数量,CUSER创建人。
数据库表TBL_ORDER有个字段MONTHID年月,CUSTID客户,ORDERNUM订单数量。
如果要把dtTable数据批量插入到TBL_ORDER中,这个时候会发现一个问题,dtTable列名YEARM和表TBL_ORDER的MONTHID不一致,而且CUSER是我们不需要的,怎么办呢?对,我们可以新建一个表dt2,并把dtTable中我们需要的三列数据复制给dt2,最后再把dt2批量插入给TBL_ORDER。以下是我的部分代码:

                Dim dt2 As New DataTable
                dt2.Columns.Add("MONTHID", System.Type.GetType("System.String"))
                dt2.Columns.Add("CUSTID", System.Type.GetType("System.String"))

                dt2.Columns.Add("ORDERNUM", System.Type.GetType("System.Decimal"))
           

                For i = 0 To dtTable.Rows.Count - 1
                    dt2.Rows.Add()
                    dt2.Rows(i).Item("MONTHID") = dtTable.Rows(i).Item("YEARM")
                    dt2.Rows(i).Item("CUSTID") = dtTable.Rows(i).Item("CUSTID")
                    dt2.Rows(i).Item("ORDERNUM") = dtTable.Rows(i).Item("ORDERNUM")
                Next

                CALL CreateCmdsAndUpdate(dt2, "select MONTHID,CUSTID,ORDERNUM from TBL_ORDER")

另外,我们看到CreateCmdsAndUpdate函数参数SQL语句是一个查询的语句,它出现的列一定要在datatable中存在否则就要报错啦。
  评论这张
 
阅读(2210)| 评论(4)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017