Nie chce mi się wycinać istotnych fragmentów z mojego przykładu, sam dojdziesz o co biega, apropos ds mozesz stworzyć szybko używając odpowiedniego kreatora poźniej mozesz ja zoptymalizować pod swoje rzeczy inaczej musisz pobierać schemat bazy jeśli to ma być dla dowlonej, a o to i fragment
#region Zmienne
protected string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Krzysiu\Moje dokumenty\Visual Studio 2008\Projects\obsługa bazy SQL\obsługa bazy SQL\SRP.mdf;Integrated Security=True;Max Pool Size=200;Asynchronous Processing=True;Connect Timeout=30;User Instance=True";
private BindingSource bsrc;
private SqlConnection northwindConnection;
private SqlDataAdapter adapter;
#endregion
#region DataGridView
private void inicjuj_tabele(string sqlCommand)
{
try
{
dgv.AutoGenerateColumns = true;
bsrc = new BindingSource();
northwindConnection = new SqlConnection(connString);
adapter = new SqlDataAdapter();
SqlCommand selectCommand = northwindConnection.CreateCommand();
SqlCommand insertCommand = northwindConnection.CreateCommand();
SqlCommand updateCommand = northwindConnection.CreateCommand();
SqlCommand deleteCommand = northwindConnection.CreateCommand();
//-------------------------kierunki------------------------
sqlCommand =
"SELECT id_kierunek, nazwa " +
"FROM kierunki";
selectCommand.CommandText = sqlCommand; //wyswietlanie odpowiednich danych
insertCommand.CommandText = "INSERT INTO kierunki (nazwa) VALUES (@nazwa)"; //wstawianie danych oraz parametry
insertCommand.Parameters.Add(
new SqlParameter("@nazwa", SqlDbType.NVarChar, 50, "nazwa"));
updateCommand.CommandText = "UPDATE kierunki SET nazwa = @nazwa WHERE id_kierunek = @id_kierunek"; //aktualizowanie wybranych danych
updateCommand.Parameters.Add(
new SqlParameter("@id_kierunek", SqlDbType.Int, 5, "id_kierunek"));
updateCommand.Parameters.Add(
new SqlParameter("@nazwa", SqlDbType.NVarChar, 50, "nazwa"));
deleteCommand.CommandText = "DELETE kierunki WHERE id_kierunek=@id_kierunek"; //usuwanie wybranych danych
deleteCommand.Parameters.Add(
new SqlParameter("@id_kierunek", SqlDbType.Int, 5, "id_kierunek"));
bsrc.DataSource = ds.kierunki; //przypisanie tabeli danych do binding source
//--------------------------------------------------------
adapter.SelectCommand = selectCommand; //przypisanie odpowiednich polecen adaptera dla danych
adapter.InsertCommand = insertCommand;
adapter.UpdateCommand = updateCommand;
adapter.DeleteCommand = deleteCommand;
adapter.Fill(ds.kierunki); //wypelnienie adaptera danymi
dgv.DataSource = bsrc;
//dgv.Columns[0].Visible = false; //pokazuje lub ukrywa pierwsza kol
northwindConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Program wygenerował bład: \n\n" + ex.Message, "ERROR",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
}
#endregion
public frm_glowne()
{
InitializeComponent();
}
#region Zdarzenia
private void frm_glowne_Load(object sender, EventArgs e)
{
northwindConnection = new SqlConnection(connString); //stworzenie polaczenia
inicjuj_tabele("");
}
private void bt_przeladuj_Click(object sender, EventArgs e)
{
dgv.ClearSelection();
inicjuj_tabele("");
}
private void bt_odswiez_Click(object sender, EventArgs e)
{
// po zabraniu // powinno wstawiac jeden rekord
//ds.kierunki.AddkierunkiRow(
// "Nowo powstały kierunek");
adapter.Update(ds.kierunki);
//dgv.Refresh();
}
Zapomnialem dodac polecenie insertu w Access bedzie nie co inne np
INSERT INTO (id,kierunek) KIERUNKI VALUES ( ?, ?) prócz tego oczywiście inny connStr, ale to co tutaj masz powinno ci troche to rozjaśnić i oczywiscie na Accesa USING SYSTEM.DATA.OLEDB i adaptery itd również z tej klasy;