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

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

  1. 22Serega22

    22Serega22 Гость

    Репутация:
    0
    Всем доброе утро!!!
    Есть файл БД 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 Гость

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

    BVS Гость

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

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