2016-01-21 1 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, а также в моей базе данных также как я могу заблокировать datagrid от ввода полей случайно

ответ

0

Ваш код очень не прав. Вы правильно извлекаете данные, но затем вы вставляете и удаляете неправильно.

Идея состоит в том, что вы используете один адаптер данных для всех четырех операций, то есть выбираете, вставляете, обновляете и удаляете. Вот почему он имеет SelectCommand, InsertCommand, UpdateCommand и DeleteCommand объектов недвижимости. Вы вызываете Fill и он выполняет SQL в SelectCommand для извлечения данных в DataTable. Затем вы должны внести все необходимые изменения, то есть вставить, обновить и удалить данные в DataTable. Когда вы закончите, вы вызываете Update на адаптере данных и он будет выполнять SQL в InsertCommand, UpdateCommand и DeleteCommand, как требуется для сохранения всех изменений в базе данных. Вот пример, который я написал давным-давно:

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. спасибо за это и прокомментирую здесь, если у меня возникнут проблемы. еще раз спасибо –