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

  • Автор темы 22Serega22
  • Дата начала
2

22Serega22

Гость
#1
Всем доброе утро!!!
Есть файл БД 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);
}
}
}
 
B

BoYar

Гость
#2
смею предположить что ты апдейтишь адаптер при закрытом соединении
 
B

BVS

Гость
#3
catch (Exception) { MessageBox.Show("Изменения в базе данных выполнить не удалось!", "Уведомление о результатах", MessageBoxButtons.OK, MessageBoxIcon.Error); }
Похвально, что ты обработал исключение. Теперь попробуй поменять этот кусочек кода, что выдавалась подробная информация о причине по которой изменения не сохранились.