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

请高手看下这个VB.NET问题。

我想在窗体form1中的textbox1、textbox2、textbox3、textbox4文本框中输入内容,然后保存到数据库表ccqzdw中,通过datagrid控件显示保存后的数据表内容——下面是我自己写的代码,但不知道问题在哪,总是不能实现保存到数据表后在datagrid中显示!!求高手细心解答下。谢谢了!非诚勿扰。

Dim das1 As New System.Data.DataSet()
Dim dap1 As New System.Data.OleDb.OleDbDataAdapter()

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim cnn1 As System.Data.OleDb.OleDbConnection = connectto企1()
        Dim str1 As String = "select * from ccqzdw"
        Dim cmd1 As New System.Data.OleDb.OleDbCommand(str1, cnn1)
        dap1.SelectCommand = cmd1
        Dim cmb1 As New System.Data.OleDb.OleDbCommandBuilder()
        cmb1 = New System.Data.OleDb.OleDbCommandBuilder(dap1)
        dap1.Fill(das1, "ccqzdw")
        With DataGrid1
            .DataSource = das1.Tables("ccqzdw")
        End With
        Dim Mycurre As CurrencyManager
        Dim MyGrid As DataGridTableStyle
        Mycurre = CType(Me.BindingContext(das1, "ccqzdw"), CurrencyManager)
        MyGrid = New DataGridTableStyle(Mycurre)
        Me.DataGrid1.TableStyles.Clear()
        Me.DataGrid1.TableStyles.Add(MyGrid)
        Me.DataGrid1.DataSource = das1.Tables("ccqzdw")
End Sub

    Function connectto企1() As System.Data.OleDb.OleDbConnection
        Dim str1 As String = "provider=microsoft.jet.oledb.4.0;"
        str1 += "data source=D:\My Documents\Visual Studio 2005\Projects\练习1\练习1\zdwxy.mdb"
        Dim cnn1 As New System.Data.OleDb.OleDbConnection()
        cnn1.ConnectionString = str1
        Return cnn1

    End Function

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim nRow As DataRow = das1.Tables("ccqzdw").NewRow()  
        nRow("序号") = TextBox1.Text
        nRow("名称") = TextBox2.Text
        nRow("质量") = TextBox3.Text
        nRow("质量") = TextBox4.Text
        nRow("是否缺货") = (True Or False)
        If Val(TextBox3.Text) <= Val(TextBox4.Text) Then
            nRow("是否缺货") = True
        ElseIf Val(TextBox3.Text) > Val(TextBox4.Text) Then
            nRow("是否缺货") = False
        End If

        das1.Tables("ccqzdw").Rows.Add(nRow)
        dap1.Update(das1, "ccqzdw") 

        das1.Tables("ccqzdw").AcceptChanges()

    End Sub

运行后在窗体中输入数值单击按钮Button2,报错:insert into 语法错误!!请问如何解决? --------------------编程问答-------------------- 猜测是不是某列不允许为空,你没填写。 --------------------编程问答-------------------- 代码是没问题的。
是不是能保存到数据库,不能在DataGrid中显示? --------------------编程问答--------------------
引用 1 楼 wuyazhe 的回复:
猜测是不是某列不允许为空,你没填写。


吴哥好啊,数据表我设置的列可以允许空啊,不晓得您指哪项没填写呢? --------------------编程问答--------------------
引用 2 楼 ckp00001 的回复:
代码是没问题的。
是不是能保存到数据库,不能在DataGrid中显示?


就是报错保存失败哦!! --------------------编程问答-------------------- 将cmb1声明放在窗体级试试,另外你的数据表有主键吗?
Dim cmb1 As System.Data.OleDb.OleDbCommandBuilder()
--------------------编程问答-------------------- 数据表主键这个很重要 --------------------编程问答-------------------- 添加try catch单步跟踪
oledbdataadapter实现数据更新
检查字段类型
Dim MyCommandBuilder As New OleDbCommandBuilder
MyCommandBuilder = New OleDbCommandBuilder(da)
da.Update(ds, "tablename") --------------------编程问答--------------------
引用 5 楼 asdfy 的回复:
将cmb1声明放在窗体级试试,另外你的数据表有主键吗?
Dim cmb1 As System.Data.OleDb.OleDbCommandBuilder()


这样放也不行,一样报错:insert into 语法错误。数据表有设主键了的。
--------------------编程问答--------------------
引用 7 楼 wuyq11 的回复:
添加try catch单步跟踪
oledbdataadapter实现数据更新
检查字段类型
Dim MyCommandBuilder As New OleDbCommandBuilder
MyCommandBuilder = New OleDbCommandBuilder(da)
da.Update(ds, "tablename")


添加try catch单步跟踪后还是到这一句报错—— dap1.Update(das1, "ccqzdw")。 --------------------编程问答-------------------- textbox2 设置类型为(varchar) --------------------编程问答--------------------
引用 10 楼 tan124 的回复:
textbox2 设置类型为(varchar)


您为什么建议只设置textbox2的类型呢?没效果啊。 --------------------编程问答-------------------- 看看是什么:Debug.Print(cmb1.GetInsertCommand.CommandText)
--------------------编程问答-------------------- nRow("是否缺货") = (True Or False)
这句似乎没作用啊. --------------------编程问答--------------------
引用 13 楼 asdfy 的回复:
nRow("是否缺货") = (True Or False)
这句似乎没作用啊.


这句是逻辑型判断“有无货”的。 --------------------编程问答-------------------- 不知道是哪里的insert into语法错误的!到底问题在哪里呢? --------------------编程问答-------------------- 这种往DataTable添加Row来更新没用过,可以建个简单的数据表来仅仅演示下更新,看看会有什么问题没。 --------------------编程问答-------------------- --------------------编程问答-------------------- 你这个问题还是不太明确
try出来的具体是什么提示? --------------------编程问答-------------------- dap1.insertcommand = cmb1.getinsertcommand
--------------------编程问答-------------------- 不知道楼主的INSERT INTO语句是咋写的?
不知道主键是怎么定义的(哪个字段/自动编号)?
如果"序号"字段是主键,是否可能填重了?
如果另有一个字段,是不是设为"自动编号"了?
--------------------编程问答-------------------- 另外
nRow("是否缺货") = (True Or False)
这句实际是就是把"缺货"置为True,而下面又重复判断了,所以可以去掉.
--------------------编程问答-------------------- 如果数据表没有主键,那么使用dap1.Update(das1, "ccqzdw")是无效的,即保存不了数据!
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,