插入可更新,删除却不可更新,请教
Dim myrow As DataRow = Myds.Tables(0).NewRow
myrow.Item(0) = 4
myrow.Item(1) = "slkj7hka"
myrow.Item(2) = 21
myrow.Item(3) = 217
Myds.Tables(0).Rows.Add(myrow)
Dim tBuilder As New OleDbCommandBuilder(MydataAdapter)
MydataAdapter.DeleteCommand = tBuilder.GetInsertCommand()
MydataAdapter.Update(Myds.Tables(0))
插入记录可更新数据库内容
Myds.Tables(0).Rows.RemoveAt(1)
Dim tBuilder As New OleDbCommandBuilder(MydataAdapter)
MydataAdapter.DeleteCommand = tBuilder.GetDeleteCommand()
MydataAdapter.Update(Myds.Tables(0))
删除后无法更新数据库,不知出什么问题了
问题点数:30、回复次数:9Top
1 楼saucer(思归)回复于 2005-04-02 22:33:49 得分 0
what is the datasource?
>>>不知出什么问题了
catch the exception to see what the nature of the exception isTop
2 楼chenyuming2004(这辈子我算是废了)回复于 2005-04-03 03:06:43 得分 0
Dim tBuilder As New OleDbCommandBuilder(MydataAdapter)
这中间什么更新,插入,删除都无所谓啊。
MydataAdapter.Update(Myds.Tables(0))
像这句我感觉没必要,它会自动生成,自动做的。
MydataAdapter.DeleteCommand = tBuilder.GetDeleteCommand()
Top
3 楼zhanghui7880()回复于 2005-04-03 08:14:52 得分 0
MydataAdapter.DeleteCommand = tBuilder.GetDeleteCommand()
这句话的确没有用,去掉也可以运行,我设置断电察看,自动生成的删除语句,就是针对Tables(0))对应的表操作的,可就是删除不了
Top
4 楼zhanghui7880()回复于 2005-04-03 08:16:00 得分 0
upTop
5 楼zhanghui7880()回复于 2005-04-03 21:06:17 得分 0
这个程序运行正常,但数据源没有更新Top
6 楼cyczl666(蔡蔡)回复于 2005-04-03 21:42:23 得分 15
up一个,我也遇到同样问题
用DataAdapter.Update(Dataset),数据源总是不变
'Update dataset
dsGreaser.Tables(0).Rows(index).Item("CurrentValue") = 10
dsGreaser.Tables(0).Rows(index).Item("SetValue") = 10
dsGreaser.Tables(0).Rows(index).Item("TotalValue") = 10
'Update database
Dim strDbFileName As String = "data\parameter.mdb"
Dim strConnectionString As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + strDbFileName
Dim strCommandString As String = "SELECT * FROM GreaserParameter"
Dim myConnection As New OleDbConnection(strConnectionString)
Dim myDataAdapter As New OleDbDataAdapter(strCommandString, myConnection)
Dim myCommandBuilder As New OleDbCommandBuilder(myDataAdapter)
myDataAdapter.UpdateCommand = myCommandBuilder.GetUpdateCommand
myDataAdapter.Update(dsGreaser)
dsGreaser.AcceptChanges()
这样就可以:
Dim strDbFileName As String = "data\parameter.mdb"
Dim strConnectionString As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + strDbFileName
Dim strCommandString As String = "SELECT * FROM GreaserParameter"
Dim myConnection As New OleDbConnection(strConnectionString)
Dim myDataAdapter As New OleDbDataAdapter(strCommandString, myConnection)
Dim myCommand As New OleDbCommand("UPDATE GreaserParameter SET CurrentValue=10, SetValue=10, TotalValue=10 WHERE Index=1", myConnection)
myCommand.Connection.Open()
myCommand.ExecuteNonQuery()
myCommand.Connection.Close()Top
7 楼hamadou(闵峰--为了理想而奋斗)回复于 2005-04-04 09:23:31 得分 15
Myds.Tables(0).Rows.RemoveAt(1)
Dim tBuilder As New OleDbCommandBuilder(MydataAdapter)
MydataAdapter.DeleteCommand = tBuilder.GetDeleteCommand()
MydataAdapter.Update(Myds.Tables(0))
删除后无法更新数据库,不知出什么问题了
/////////////////////////////////////////////////////
原因是:
用于从 DataTable 对象中删除 DataRow 对象的方法有两种:DataRowCollection 对象的 Remove 方法和 DataRow 对象的 Delete 方法。Remove 方法从 DataRowCollection 中删除 DataRow,而 Delete 方法只将行标记为删除。当应用程序调用 AcceptChanges 方法时,才会发生实际的删除。通过使用 Delete,您可以在实际删除之前先以编程方式检查哪些行标记为删除。如果将行标记为删除,其 RowState 属性会设置为 Deleted。
在将 DataSet 或 DataTable 与 DataAdapter 和关系型数据源一起使用时,用 DataRow 的 Delete 方法移除行。Delete 方法只是在 DataSet 或 DataTable 中将行标记为 Deleted,而不会移除它。而 DataAdapter 在遇到标记为 Deleted 的行时,会执行其 DeleteCommand 以在数据源中删除该行。然后,就可以用 AcceptChanges 方法永久移除该行。如果使用 Remove 删除该行,则该行将从表中完全移除,但 DataAdapter 不会在数据源中删除该行。
Top
8 楼hamadou(闵峰--为了理想而奋斗)回复于 2005-04-04 09:25:01 得分 0
可见用rows.remove或rows.removeat都是从datarowcollection中移除了该行,但datatadapter并不会去在数据源进行修改该行!Top
9 楼zhanghui7880()回复于 2005-04-05 13:44:47 得分 0
hamadou(闵峰),能否 给一各简单的小例子Top




