datagridview 更新数据库问题
通过代码将access数据库绑定到datagridview上,现在想单击保存,将datagridview的更改保存到数据库,书上说用dataadapterdataadapter.update(dataset)
现在运行时有点问题,我把项目传上来,请帮忙看一下
练习.rar
(430.96 KB)
Imports System.Data.SqlClient Imports System.Data Public Class frm_data Private ds As New Data.DataSet() Dim dbBlder As OleDb.OleDbCommandBuilder Dim da As OleDb.OleDbDataAdapter Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdopen.Click Dim dbaname As String = txtdba.Text '指定数据库文件路径及名称 Dim connStr As String = "provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & CurDir() & dbaname Dim tabname As String = cmbtable.Text Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(connStr) Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand Dim sql As String = "select * from " & tabname conn.Open() '打开连接 cmd.Connection = conn da = New OleDb.OleDbDataAdapter(sql, conn) ds.Tables.Clear() da.Fill(ds, "pylj") DataGridView1.DataSource = ds.Tables(0) '更换datagridview1的数据源 'DataGridView1.Refresh() '这句不要datagridview1也可更新 '-------------- '获取表所含字段并更新至cmbfiled Dim n As Integer = ds.Tables(0).Columns.Count - 1 cmbfiled.Items.Clear() For i As Integer = 0 To n cmbfiled.Items.Add(ds.Tables(0).Columns(i).ColumnName) Next cmbfiled.SelectedIndex = 0 End Sub Private Sub DataGridView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.DoubleClick MsgBox(DataGridView1.CurrentCell.Value) End Sub Private Sub frm_data_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load txtdba.Text = "\data\py.mdb" End Sub Private Sub butconn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butconn.Click cmbtable.Items.Clear() '显示数据所含表 For i As Int16 = 0 To GetAllTableName.Count - 1 cmbtable.Items.Add(GetAllTableName.Item(i).ToString) Next cmbtable.SelectedIndex = 0 End Sub Private Sub cmbfiled_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbfiled.SelectedIndexChanged Dim i As Integer = cmbfiled.SelectedIndex '显示所选字段数据类型 txtfieldtype.Text = ds.Tables(0).Columns(i).DataType.Name End Sub Function GetAllTableName() As System.Collections.ArrayList Dim t As New System.Collections.ArrayList() Dim Rs As New ADODB.Recordset() Dim dbaname As String = txtdba.Text '指定数据库文件路径及名称 Dim connStr As String = "provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & CurDir() & dbaname Dim conn As New ADODB.Connection conn.Open(connStr) Rs = conn.OpenSchema(ADODB.SchemaEnum.adSchemaTables) Do While Not Rs.EOF If Rs("TABLE_TYPE").Value = "TABLE" Then t.Add(Rs("TABLE_NAME").Value) End If Rs.MoveNext() If Rs.EOF Then Exit Do Loop Rs.Close() Rs = Nothing Return t End Function Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '保存的代码写在这里 dbBlder = New OleDb.OleDbCommandBuilder(da)'此变量定义见代码开头 Try da.Update(ds.Tables(0)) MsgBox("数据库更新结束") Catch MsgBox("数据库更新失败") End Try End Sub End Class