怎么在更新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--------------------编程问答-------------------- Criedshy,请问sTableName这个变量是什么?? --------------------编程问答-------------------- 是字符串变量,用来标你数据集中的表
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
相当于 da.Fill(dataset, "ProductCategory")
的 "ProductCategory" --------------------编程问答-------------------- 3楼的方法试了貌似不行啊,还有别的招吗?? --------------------编程问答-------------------- 我也有同样的问题,在网格中修改数据,不移动出当前行,数据就不会保存的数据库里面
补充:.NET技术 , VB.NET