2016-01-21 65 views
0

這是我的代碼從數據庫加載數據到DataGrid中如何編輯Datagrid的記錄,並在數據庫

Private Sub Records_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim connString As String = "Provider=Microsoft.Ace.Oledb.12.0; Data Source=" & My.Application.Info.DirectoryPath.ToString() & "\BackUp\Database3.Accdb;" 
    Dim MyConn As OleDbConnection 
    Dim da As OleDbDataAdapter 
    Dim ds As DataSet 
    Dim tables As DataTableCollection 
    Dim source1 As New BindingSource 

    MyConn = New OleDbConnection 
    MyConn.ConnectionString = connString 
    ds = New DataSet 
    tables = ds.Tables 
    da = New OleDbDataAdapter("Select * from [userinfo] ORDER BY ID", MyConn) 
    da.Fill(ds, "userinfo") 'Change items to your database name 
    Dim cb = New OleDbCommandBuilder(da) 
    Dim view As New DataView(tables(0)) 
    source1.DataSource = view 
    DataGridView1.DataSource = view 

End Sub 


Private Sub btnCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreate.Click 
    If RequiredEntry() = True Then 
     Return 
    End If 
    Try 
     Dim cn As New OleDbConnection("Provider=Microsoft.Ace.Oledb.12.0; Data Source=" & My.Application.Info.DirectoryPath.ToString() & "\BackUp\Database3.Accdb;") 

     If cn.State = ConnectionState.Closed Then cn.Open() 

     Dim sSQL As String = "insert into [userinfo]([username],[password],[FirstName],[LastName],[Account]) values(@username,@password,@FirstName,@LastName,@Account)" 

     Dim cmd As OleDbCommand = New OleDbCommand(sSQL, cn) 


     ' UserName 
     If txtPassword.Text = txtConfirm.Text Then 
      Dim username As OleDbParameter = New OleDbParameter("@username", OleDbType.VarWChar, 50) 
      username.Value = txtUser.Text.ToString() 
      cmd.Parameters.Add(username) 
     Else 
      MsgBox("Password not matched") 

     End If 

     'password 
     Dim password As OleDbParameter = New OleDbParameter("@password", OleDbType.VarWChar, 50) 
     password.Value = txtPassword.Text.ToString() 
     cmd.Parameters.Add(password) 


     'First Name 
     Dim FirstName As OleDbParameter = New OleDbParameter("@FirstName", OleDbType.VarWChar, 50) 
     FirstName.Value = txtFirstName.Text.ToString() 
     cmd.Parameters.Add(FirstName) 


     ' Last Name 
     Dim LastName As OleDbParameter = New OleDbParameter("@LastName", OleDbType.VarWChar, 50) 
     LastName.Value = txtLastName.Text.ToString() 
     cmd.Parameters.Add(LastName) 

     'Account 

     Dim Account As OleDbParameter = New OleDbParameter("@Account", OleDbType.VarWChar, 50) 
     Account.Value = cboAccount.GetItemText(cboAccount.SelectedItem) 
     cmd.Parameters.Add(Account) 



     If cmd.ExecuteNonQuery() Then 
      cn.Close() 
      MessageBox.Show("New User is Added successfully.", "Record Saved") 
      Call clear() 
      Me.Hide() 
      FileMaintenance.Show() 


     Else 
      MsgBox("New User Addition Failed ", MsgBoxStyle.Critical, "Addition Failed") 
      Return 
     End If 

    Catch ex As Exception 
     Exit Sub 
    End Try 
End Sub 
Private Sub NewUser_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
    e.SuppressKeyPress = e.Control 
    If e.KeyCode = Keys.Enter Then 
     SendKeys.Send("{tab}") 
    End If 

End Sub 

,這是我刪除

Private Sub cmdDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDelete.Click 
    Dim connString As String = "Provider=Microsoft.Ace.Oledb.12.0; Data Source=" & My.Application.Info.DirectoryPath.ToString() & "\BackUp\Database3.Accdb;" 
    Dim MyConn As OleDbConnection 
    Dim da As OleDbDataAdapter 
    Dim ds As DataSet 
    Dim tables As DataTableCollection 
    Dim source1 As New BindingSource 
    Dim rows As String 


    Try 
     MyConn = New OleDbConnection 
     MyConn.ConnectionString = connString 
     ds = New DataSet 
     tables = (ds.Tables) 
     rows = DataGridView1.SelectedRows(0).Cells(0).Value.ToString() 
     da = New OleDbDataAdapter("Delete * from [userinfo] where ID=" & rows, MyConn) 
     da.Fill(ds, "userinfo") 
     Records_Load(sender, e) 

    Catch ex As Exception 
     MessageBox.Show("cannot delete empty records") 
    End Try 

如何編輯我的數據從datagrid視圖以及我的數據庫 也如何鎖定數據網格輸入字段意外

回答

0

您的代碼是非常錯誤的。您首先正確檢索數據,但是您插入和刪除不正確。

這個想法是,您使用一個數據適配器進行全部四個操作,即選擇,插入,更新和刪除。這就是爲什麼它具有SelectCommand,InsertCommand,UpdateCommandDeleteCommand屬性。您調用Fill並執行SelectCommand中的SQL以將數據檢索到DataTable。然後,您應該對所需的所有更改進行更改,即插入,更新和刪除DataTable中的數據。完成後,您可以在數據適配器上調用Update,並根據需要執行InsertCommand,UpdateCommandDeleteCommand中的SQL,以將所有更改保存回數據庫。下面是我寫了一個很久以前的例子:

Private connection As New SqlConnection("connection string here") 
Private adapter As New SqlDataAdapter("SELECT ID, Name, Quantity, Unit FROM StockItem", _ 
             connection) 
Private table As New DataTable 

Private Sub InitialiseDataAdapter() 
    Dim delete As New SqlCommand("DELETE FROM StockItem WHERE ID = @ID", Me.connection) 
    Dim insert As New SqlCommand("INSERT INTO StockItem (Name, Quantity, Unit) VALUES (@Name, @Quantity, @Unit)", Me.connection) 
    Dim update As New SqlCommand("UPDATE StockItem SET Name = @Name, Quantity = @Quantity, Unit = @Unit WHERE ID = @ID", Me.connection) 

    delete.Parameters.Add("@ID", SqlDbType.Int, 4, "ID") 

    insert.Parameters.Add("@Name", SqlDbType.VarChar, 100, "Name") 
    insert.Parameters.Add("@Quantity", SqlDbType.Float, 8, "Quantity") 
    insert.Parameters.Add("@Unit", SqlDbType.VarChar, 10, "Unit") 

    update.Parameters.Add("@Name", SqlDbType.VarChar, 100, "Name") 
    update.Parameters.Add("@Quantity", SqlDbType.Float, 8, "Quantity") 
    update.Parameters.Add("@Unit", SqlDbType.VarChar, 10, "Unit") 
    update.Parameters.Add("@ID", SqlDbType.Int, 4, "ID") 

    Me.adapter.DeleteCommand = delete 
    Me.adapter.InsertCommand = insert 
    Me.adapter.UpdateCommand = update 

    Me.adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey 
End Sub 

Private Sub GetData() 
    'Retrieve the data. 
    Me.adapter.Fill(Me.table) 

    'The table can be used here to display and edit the data. 
    'That will most likely involve data-binding but that is not a data access issue. 
End Sub 

Private Sub SaveData() 
    'Save the changes. 
    Me.adapter.Update(Me.table) 
End Sub 

注意,這個例子是爲SQL Server寫,但你只是換了所有的SqlClient類型OleDb類型和它的作品的訪問。

如果您想要因某種原因立即保存更改,那麼在每次更改後只需致電Update即可。

順便說一句,您的連接字符串應該這樣寫:

Dim connString As String = "Provider=Microsoft.Ace.Oledb.12.0; Data Source=|DataDirectory|\BackUp\Database3.Accdb;" 
+0

對不起,我有一個混合SQL和OLEDB教程。將使用您的代碼並將其更改爲oledb。感謝它,並會在這裏再次評論,如果我有問題。再次感謝 –

相關問題