数据库更新错误
我写的小程序是个多窗体程序!因此我需要建一个连类!数据库的连接和读取都没问题但是在更新时出现了问题!Imports System.Data
Imports System.Data.OleDb
-------------------------------------------
Public Class Class1
Public adocmd As OleDbDataAdapter
Public ds As DataSet = New DataSet()
Public cb As OleDbCommandBuilder
Public mytable As Data.DataTable
Public myrow As Data.DataRow
Public rownumber As Integer
Public sqlstr As String = "select * from login"
Public constring As String = "provider=microsoft.jet.oledb.4.0;data source=guanli.mdb"
---------------------------------------
Public Sub opendb()
adocmd = New OleDbDataAdapter(sqlstr, constring)
adocmd.Fill(ds, "mytable")
mytable = ds.Tables("mytable")
rownumber = 0
myrow = mytable.Rows.Item(rownumber)
End Sub
-------------------------------------------------
Public Sub edit()
cb = New OleDbCommandBuilder(adocmd)
'Try
adocmd.Update(ds, "mytable")
' Catch ex As Exception
'MsgBox("保存错误")
'End Try
End Sub
End Class
我开始没有写oledbcommandbuilder语句报错为 当传递具有已修改行的datarow集合时 更新要求有效的command
我查阅资料后知道.net 不能自动生成command 但加上builder 后adocmd.update(ds,"mytable ")报错为update语句的语法错误。
请各位大虾执教!
--------------------编程问答--------------------
--------------------编程问答-------------------- 楼上和我的头像一样啊。缘分。
Public Sub edit()
adocmd = New OleDbDataAdapter(sqlstr, constring)
adocmd.Fill(ds, "mytable")
mytable = ds.Tables("mytable")
adocmd.Update(ds, "mytable")
End Sub
除了楼上的方法,你的数据库给了“写入”权限没? --------------------编程问答-------------------- 2楼的朋友 我新手不太懂你的意思!你写的好像跟我opendb差不多了!重新打开并填充了表mytable
我在其他form中调用class1.edit()时 已经使用了class1.myrow.item(?)=textbox1.text如果使用你的代码时就不会更新了巴! 谢谢指教。 --------------------编程问答-------------------- 3楼的朋友!你所说的数据库写入权是怎么回事?我的access数据库没觉得有什么限制阿 --------------------编程问答-------------------- 我研究了上午半天,終於可以更新數據庫了呵呵,希望對你也能有用
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click--------------------编程问答-------------------- 明天我试一试 不管可不可以 先谢谢咯 --------------------编程问答-------------------- 动态生成SQL语句要求表要有主键。
Dim mycom As OleDb.OleDbCommand = New OleDb.OleDbCommand("select * from oarecord where USER_NM like '%" + USER_NM.Text.Trim() + "%' and DATA_LIMB>='" + DATA_LIMB.Text.Trim() + "' and DATA_LIME<='" + DATA_LIME.Text.Trim() + "' and SORT like '%" + SORT.Text.Trim() + "%'" & sqlc + "order by id_oa", conn)
da.SelectCommand = mycom
da.Fill(ds, "dTable")
DataGridView1.DataSource = ds.Tables("dTable")
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Try
Dim commandbuilder As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(da)
da.Update(ds.Tables("dTable"))
MessageBox.Show("更新成功!")
Catch ex As Exception
MessageBox.Show(ex.ToString())
Return
End Try
End Sub
'须要有一个主键
Dim builder As Data.OleDb.OleDbCommandBuilder
DA.DeleteCommand = builder.GetDeleteCommand
DA.InsertCommand = builder.GetInsertCommand
DA.UpdateCommand = builder.GetUpdateCommand
参考:
http://topic.csdn.net/u/20080802/11/ef2d2809-b061-45cd-b56e-1d0bed8d12f2.html --------------------编程问答--------------------
我在其他form中使用了class1.myrow.item(2)=textbox1.text
然后是class1.edit()
5楼的方法错误为update语句的语法错误
7楼的方法我没看懂 但是吧上面的代码输入到edit()中还是不对
关于主键问题我更是不明白了 ,我的access中 已经设置了主键阿! --------------------编程问答-------------------- 我在class1.myrow.item(2)=?????
后加上了class1.myrow.acceptchanges()
然后class1.edit()
其中类class1中的 Public Sub edit()
adocmd.Update(ds, "mytable")
End Sub
数据表中的数据已经改变了,但是并没有更新到数据库阿 --------------------编程问答-------------------- 没有更新到数据库是因为没有生成更新的UpdateCommand SQL语句,而要动态生成SQL语句[数据库表]须要有主键,否则会报错!
即如下是
动态生成SQL语句要求表要有主键。
Dim builder As Data.OleDb.OleDbCommandBuilder
adocmd .DeleteCommand = builder.GetDeleteCommand
adocmd .InsertCommand = builder.GetInsertCommand
adocmd .UpdateCommand = builder.GetUpdateCommand
可参考贴:
http://topic.csdn.net/u/20080802/11/ef2d2809-b061-45cd-b56e-1d0bed8d12f2.html --------------------编程问答--------------------
这个可以,我试过了 --------------------编程问答-------------------- 关注……
补充:.NET技术 , VB.NET