Datagridview保存更改为数据库vb.net

问题描述:

你好我有一个数据库,我加载到vb.net应用程序Datagridview。 它加载正常,但是当我尝试保存日期不起作用。 这里是代码当新行传递的DataRow集合Datagridview保存更改为数据库vb.net

Private myConString As String 
Private con As OleDbConnection = New OleDbConnection 
Private Dadapter As OleDbDataAdapter 
Private DSet As DataSet 
Private DSet2 As DataSet 
Private ConCMD As OleDb.OleDbCommand 

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    myConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=e:\Database31.accdb" 
    con.ConnectionString = myConString 
    con.Open() 
    Dadapter = New OleDbDataAdapter("select * from Table1", con) 
    DSet = New DataSet 
    Dadapter.Fill(DSet, "Table1") 
    DataGridView1.DataSource = DSet.Tables("Table1") 
    con.Close() 
End Sub 


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    con.Open() 
    Dadapter.Update(DSet, "Table1") 
    DSet.AcceptChanges() 
    con.Close() 
End Sub 

更新需要有效的InsertCommand。 我该怎么办?

的accessdatabase 3个colmuns ID是主键 ID字段1字段2

所以,你必须定义一个InsertCommandDataAdapter

侧面说明:该生产线DSet.AcceptChanges()是多余的,因为前行Dadapter.Update将调用隐含地表示为AcceptChanges

您应该使用using-statement来执行任何类似Connection的IDisposable。即使发生异常,也会隐含地调用Dispose(即关闭连接)。

所以更换:

con.Open() 
Dadapter.Update(DSet, "Table1") 
DSet.AcceptChanges() 
con.Close() 

Using con = New OleDbConnection(myConString) 
    con .Open() 
    Dadapter.Update(DSet, "Table1") 
End Using 
+0

谢谢,但仍然是什么插入命令?!我的数据库只有3个字段ID Field1 Field2..so我的插入命令应该如何? – FPGA 2012-07-08 00:10:01

+0

编辑我的答案,为[OleDbDataAdapter.InsertCommand]提供msdn链接(http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdataadapter.insertcommand%28v=vs.100%29。 ASPX)。有一个sql INSERT语句的例子。 – 2012-07-08 00:13:48

+0

伟大..现在假设我填充了数据网格视图2000个新的值与不同领域的循环..我想保存这是什么是最好的方法来做到这一点?插入应该在循环期间而不是在循环之后? – FPGA 2012-07-08 00:26:09

您需要从DataGrid读回的数据集

con.Open() 
DSet = DataGridView1.DataSource '<<<<<<<<<<<<<<<<<<<<<<< 
Dadapter.Update(DSet, "Table1") 
DSet.AcceptChanges() 
con.Close() 

为4型数据库我的VB.NET代码(从DataGridView到数据库的更新信息)

Private Sub sqldb_savedata() 
    Dim connectionString As String = "Server='" & sql_server & "';Database='" & sql_database & "';User Id='" & sql_user & "';Password='" & sql_pass & "'" 
    Dim sqlCon = New SqlConnection(connectionString) 
    If (sqlCon.State = ConnectionState.Closed) Then sqlCon.Open() 
    Dim SQLAdapter = New SqlDataAdapter("SELECT * FROM clinics", sqlCon) 
    Dim SQLDataSet As New DataSet 
    Dim myTable = DataGridViewClinic.DataSource 
    Dim cmdbuilder As New SqlCommandBuilder(SQLAdapter) 
    SQLAdapter.Update(myTable, "clinics") 
    MsgBox("Updated!", MsgBoxStyle.OkOnly, "") 
End Sub 

Private Sub mysqldb_savedata() 
    Dim connectionString As String = "Server='" & mysql_server & "';Database='" & mysql_database & "';User Id='" & mysql_user & "';Password='" & mysql_pass & "'" 
    Dim sqlCon = New MySqlConnection(connectionString) 
    If (sqlCon.State = ConnectionState.Closed) Then sqlCon.Open() 
    Dim SQLAdapter = New MySqlDataAdapter("SELECT * FROM clinics", sqlCon) 
    Dim SQLDataSet As New DataSet 
    Dim myTable = DataGridViewClinic.DataSource 
    Dim cmdbuilder As New MySqlCommandBuilder(SQLAdapter) 
    SQLAdapter.Update(myTable, "clinics") 
    MsgBox("Updated!", MsgBoxStyle.OkOnly, "") 
End Sub 

Private Sub firebirddb_savedata() 
    Dim connectionString As String = "Database='" & firebird_server & "';User=SYSDBA;Password=masterkey;Dialect=3;ServerType=1" 
    Dim sqlCon = New FirebirdSql.Data.FirebirdClient.FbConnection(connectionString) 
    If (sqlCon.State = ConnectionState.Closed) Then sqlCon.Open() 
    Dim SQLAdapter = New FirebirdSql.Data.FirebirdClient.FbDataAdapter("SELECT * FROM clinics", sqlCon) 
    Dim SQLDataSet As New DataSet 
    Dim myTable = DataGridViewClinic.DataSource 
    Dim cmdbuilder As New FirebirdClient.FbCommandBuilder(SQLAdapter) 
    SQLAdapter.Update(myTable, "clinics") 
    MsgBox("Updated!", MsgBoxStyle.OkOnly, "") 
End Sub 

Private Sub localdb_savedata() 
    DBconn = New SqlCeConnection("Data Source=Data Source=|DataDirectory|\Database.sdf") 
    If (DBconn.State = ConnectionState.Closed) Then DBconn.Open() 
    Dim SQLAdapter = New SqlCeDataAdapter("SELECT * FROM clinics", DBconn) 
    Dim SQLDataSet As New DataSet 
    Dim myTable = DataGridViewClinic.DataSource 
    Dim cmdbuilder As New SqlCeCommandBuilder(SQLAdapter) 
    SQLAdapter.Update(myTable, "clinics") 
    MsgBox("Updated!", MsgBoxStyle.OkOnly, "") 
End Sub