通过动态在dataTable中添加DataRow
然后sqldataadapter.update()方法一起提交实现

解决方案 »

  1.   

    描述:
               对数据库操作的时候,有时候需要多条数据的操作,使用sql语句消耗资源大
         解决办法:
               举例如下
               Dim myDataAdapter As New SqlClient.SqlDataAdapter()
               myDataAdapter.SelectCommand = New SqlClient.SqlCommand("select * from 表 where 条件", DeviceConnection)
               Dim custCB As SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(myDataAdapter)
               DeviceConnection.Open()
               Dim custDS As DataSet = New DataSet()
               Dim dr As DataRow
               myDataAdapter.Fill(custDS, "设备备件关系表") 
               '更改dataset的datatable的datarow
               dr = custDS.Tables("设备_备件关系表").NewRow
               '你可以在此添加数据
               custDS.Tables("设备_备件关系表").Rows.Add(dr)
               myDataAdapter.Update(custDS, "设备备件关系表")
               '更新所作的修改
               DeviceConnection.Close()
      

  2.   

    难道不能直接用insert实现吗?
      

  3.   

    好像不能用
    insert ....
    union
    insert....
    这种方法执行,至少我没用过
      

  4.   

    SqlCommand来使用Insert语句没有问题,但性能与mbm的方法想比要差一些。集中插入的方法较好。
      

  5.   

    有没有相关的例子呢?baitianhai(hong) 说的方法我不是很明白!
      

  6.   

    其实集中插入有一个最大的缺陷
    如果同时访问系统的人很多
    就会涉及到并发的问题。你把数据都取过来,然后再dataset中一条条修改,你改完了一起提交都库表。如果你改了5分钟才改完,那别的人这时候如果改变了库表里的数据,假设删除了一条记录,但你的dataset里还有这条记录,你sqladapter.update时就找不到它了。所以还是建议你用insert的sqlcommand对象一条条去插入,除非整个系统只有你一个人访问。当然,这只是极端情况。
      

  7.   

    TO:gplg(咖啡) 
    能不能提供例程啊?我还是不明白!你说的是不是就不存在mbm(-- (@ \/ @) --) 所说的问题了呢?
      

  8.   

    事务处理
    ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassBeginTransactionTopic.htm
      

  9.   

    并发控制
    ms-help://MS.VSCC/MS.MSDNVS.2052/Vbcon/html/vboriDataUpdatesConcurrency.htm
      

  10.   

    TO:mbm(-- (@ \/ @) --) 
    你说的那两个网址都找不到服务器。
      

  11.   

    在sql的语句中采用事务处理,不外就是begin(commit、rollback、save)
    tran,如果要全部插入成功才算成功,那只需在开始用begin tran,插入结束用commit tran就行了。具体用法视具体语句,最好不要在.net中用,因为.net好像不建议用事务处理。
      

  12.   

    问题解决了,谢谢大家!
    测试程序如下:        Dim strcomm As String = "select account,custtype from custtype"        MySda.SelectCommand = New SqlClient.SqlCommand(strcomm, MyConn)        Dim oDS As New DataSet()
            MySda.MissingSchemaAction = MissingSchemaAction.AddWithKey
            MySda.Fill(oDS, "cust")
            Response.Write("oetu")
            Response.End()        Dim oParam As SqlClient.SqlParameter        MySda.InsertCommand = New SqlClient.SqlCommand("insert into custtype (account,custtype) values (@account,@custtype)", MyConn)
            oParam = MySda.InsertCommand.Parameters.Add(New SqlClient.SqlParameter("@account", SqlDbType.Char, 16))
            oParam.SourceVersion = DataRowVersion.Current
            oParam.SourceColumn = "account"        oParam = MySda.InsertCommand.Parameters.Add(New SqlClient.SqlParameter("@custtype", SqlDbType.Int, 4))
            oParam.SourceVersion = DataRowVersion.Current
            oParam.SourceColumn = "custtype"        Dim index As Integer
            Dim oRow As DataRow
            For index = 0 To 1
                oRow = oDS.Tables("cust").NewRow
                oRow.Item("account") = TextBox1.Text
                oRow.Item("custtype") = TextBox2.Text
                oDS.Tables("cust").Rows.Add(oRow)
            Next
            MyConn.Open()        Try            MySda.Update(oDS, "cust")
                Response.Write("<script language=javascript>alert('插入记录成功!!!')</SCRIPT>")
            Catch Exp As SqlClient.SqlException
                If Exp.Number = 2627 Then
                    Response.Write("<script language=javascript>alert('您插入的记录已经存在!!!')</SCRIPT>")
                Else
                    Response.Write("<script language=javascript>alert('没有插入记录!!!')</SCRIPT>")
                End If
            End Try        MyConn.Close()