Работа с БД Access на С# в Mvs2010

Тема в разделе ".NET", создана пользователем 22Serega22, 9 ноя 2010.

  1. 22Serega22

    22Serega22 Гость

    Всем доброе утро!!!
    Есть файл БД Access - Phones.mdb с полями "Имя" и "Телефон", нужно написать программу на С#, которая будет открывать этот файл и в которой его можно будет изменять и сохранять изменения.
    Программу я написал, но проблема в том, что в ней изменения сохраняются только при добавлении строк, а при изменении существующих строк изменения не сохраняются.
    Кто знает в чем может быть проблема?????
    Вот сам код:
    Код (C++):
    using System;
    using System.Windows.Forms;
    using System.Data;
    // Пространство имен для работы с базами данных SQL Server
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Diagnostics;
    // Пространство имен для работы с базами данных Access
    using System.Data.OleDb;

    class DataInOutGrid : Form
    {
    OleDbDataAdapter dataAdapter;
    DataGridView dataGridView;

    public DataInOutGrid()
    {
    //Изменяем размеры формы
    this.Width = 450;
    this.Height = 400;
    // Указываем заголовок окна
    this.Text = "Записная книжка";

    // Добавляем элемент DataGridView на форму
    dataGridView = new DataGridView();
    dataGridView.Width = 414;
    dataGridView.Height = 250;
    dataGridView.Location = new Point(10, 10);
    dataGridView.AutoResizeColumns();
    this.Controls.Add(dataGridView);

    // Добавляем командную кнопку
    Button buttonSave = new Button();
    buttonSave.Location = new Point(100, 320);
    buttonSave.Width = 220;
    buttonSave.Text = "Сохранить изменения в базе данных!";
    buttonSave.Click += new System.EventHandler(ButtonSave_Click);
    buttonSave.Parent = this;

    // Формируем запрос к базе данных –
    string sql = "SELECT * FROM PHONES";
    string connectionString;

    // DataTable сохраняет данные в памяти как таблицу
    DataTable dataTable = new DataTable();

    //Связывание с базой данных Access 2003 – *.mdb
    connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    @"Data Source= ../../../databases/Phones.mdb";
    OleDbConnection connection = new OleDbConnection(connectionString);
    connection.Open();

    OleDbCommand OleDbCommand = new OleDbCommand(sql, connection);

    dataAdapter = new OleDbDataAdapter(OleDbCommand);

    //Создаем построитель команд
    //Для адаптера становится доступной команда Update
    OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(dataAdapter);

    // Данные из адаптера поступают в DataTable
    dataAdapter.Fill(dataTable);

    // Связываем данные с элементом DataGridView
    dataGridView.DataSource = dataTable;

    // Очистка
    connection.Close();
    }

    static void Main()
    {
    // Создаем и запускаем форму
    Application.Run(new DataInOutGrid());
    }

    void ButtonSave_Click(object sender, System.EventArgs args)
    {
    try
    {          
    dataAdapter.Update((DataTable)dataGridView.DataSource);
    MessageBox.Show("Изменения в базе данных выполнены!",
    "Уведомление о результатах", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception)
    {
    MessageBox.Show("Изменения в базе данных выполнить не удалось!",
    "Уведомление о результатах", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    }
    }
     
  2. BoYar

    BoYar Гость

    смею предположить что ты апдейтишь адаптер при закрытом соединении
     
  3. BVS

    BVS Гость

    Похвально, что ты обработал исключение. Теперь попробуй поменять этот кусочек кода, что выдавалась подробная информация о причине по которой изменения не сохранились.
     
Загрузка...

Поделиться этой страницей