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

数据库更新错误

我写的小程序是个多窗体程序!因此我需要建一个连类!数据库的连接和读取都没问题但是在更新时出现了问题!
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
        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
--------------------编程问答-------------------- 明天我试一试  不管可不可以 先谢谢咯 --------------------编程问答-------------------- 动态生成SQL语句要求表要有主键。
'须要有一个主键 
         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 --------------------编程问答--------------------
引用 5 楼 dingjiahappy 的回复:
我研究了上午半天,終於可以更新數據庫了呵呵,希望對你也能有用 

VB.NET codePrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        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_L…

这个可以,我试过了 --------------------编程问答-------------------- 关注……
补充:.NET技术 ,  VB.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,