当前位置:编程学习 > C#/ASP.NET >>

怎么在更新Dataset里数据的时候同时更新Database里的Table内容

Dear  大侠们,
              [align=left]VB.Net 里数据库编程,怎么把dataset里更新后的数据保存到database里的Table里?? 
              Dim intno As Integer = 產品類別.CurrentRow.Cells(0).Value
               SQLConn.Open()
                Dim sqlcommand As SqlCommand = New SqlCommand("", SQLConn)
                da = New SqlDataAdapter("select * from 產品類別", SQLConn)   '绑定数据库连接 
                da.Fill(dataset, "ProductCategory")
                da.DeleteCommand = New SqlCommand("delete from 產品類別 where 產品類別.類別編號   
                =@categoryid",   SQLConn)
                Dim workpara As SqlParameter = New SqlParameter()
                workpara = da.DeleteCommand.Parameters.Add("@categoryid", SqlDbType.Int)
                workpara.SourceColumn = "類別編號"
                workpara.SourceVersion = DataRowVersion.Original
                dataset.Tables("ProductCategory").Rows(intno - 1).Delete()
                da.Update(dataset, "ProductCategory") 
                SQLConn.Close()
                產品類別.DataSource = dataset.Tables("ProductCategory")[/align] --------------------编程问答-------------------- VC路过 --------------------编程问答-------------------- 编写代码创建的dataset与拖放表自动生成的dataset不同。自行编写代码创建DataAdapter对象时,InsertCommand等属性就不会自动创建,此时要通过CommandBuilder类的功能来协助你生成InsertCommand等属性。CommandBuilder提供自动生成单一表命令的方法,它将会调解DataSet对后台数据库的记录更新。
步骤: 
1、打开数据库连接:SqlConnection对象 

2、创建SqlDataAdapter对象 

3、创建SqlCommandBuilder对象——很重要! 

自行编写代码创建DataAdapter对象时,InsertCommand等属性就不会自动创建,此时要通过CommandBuilder类的功能来协助你生成InsertCommand等属性。CommandBuilder提供自动生成单一表命令的方法,它将会调解DataSet对后台数据库的记录更新。 

4、创建DataSet对象 

5、如果用了DataGridView和BindingNavigator,可以直接在DataGrieView上直接更新数据,代码为: 

Private Sub 保存SToolStripButton_Click_1(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles 保存SToolStripButton.Click
        Me.Validate()
        Dim myCmdBd As SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(myadapter)
        BindingNavigator1.BindingSource.EndEdit()
        myadapter.Update(mydataset1, "CPU")
     End Sub



--------------------编程问答--------------------
Public Function UpdateDs(ByVal strSql As String, ByRef Ds As DataSet, Optional ByVal sTableName As String = "") As DataSet
        Dim sqlcon As New SqlClient.SqlConnection(Me.ConnectionString)
        Dim s As SqlClient.SqlCommandBuilder
        Try
            Dim da As New SqlClient.SqlDataAdapter(strSql, sqlcon)
            s = New SqlClient.SqlCommandBuilder(da)
            sqlcon.Open()
            Dim tbChange As New DataTable
            If sTableName.Trim() = "" Then
                tbChange = CType(Ds.Tables(0).GetChanges, DataTable)
            Else
                tbChange = CType(Ds.Tables(sTableName).GetChanges, DataTable)
            End If
            If Not tbChange Is Nothing Then
                If sTableName.Trim() = "" Then
                    da.Update(Ds)
                    Ds.Tables(sTableName).Clear()
                    da.Fill(Ds)
                Else
                    da.Update(Ds, sTableName)
                    Ds.Tables(sTableName).Clear()
                    da.Fill(Ds, sTableName)
                End If
                Ds.Merge(tbChange)
                Ds.AcceptChanges()

            End If
            Return Ds
        Catch ex As Exception
            Throw ThrowErr(ex)
        Finally
            sqlcon.Close()
            sqlcon.Dispose()
        End Try
    End Function
--------------------编程问答-------------------- Criedshy,请问sTableName这个变量是什么?? --------------------编程问答-------------------- 是字符串变量,用来标你数据集中的表
相当于 da.Fill(dataset, "ProductCategory")
的 "ProductCategory" --------------------编程问答-------------------- 3楼的方法试了貌似不行啊,还有别的招吗?? --------------------编程问答-------------------- 我也有同样的问题,在网格中修改数据,不移动出当前行,数据就不会保存的数据库里面 
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,