Здравствуйте! Сегодня: Вт, 1 Дек 2020, Ваш IP: 18.232.146.10 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Базы данных
+ Создать новую тему Страница: 1
Тема: БД Access в C# · +  +  дата добавления: 10.11.2010 / 21:11
Автор темы:
ceepera
ceepera
тем: 1 / ответов: 0 / благодарностей: 0 / репутация: 0
ответов: 0
создал(а) тем: 1


Всем добрый вечер.
Есть файл БД Access - Phones.mdb с полями "Имя" и "Телефон", нужно написать программу на С#, которая будет открывать этот файл и в которой его можно будет изменять и сохранять изменения.
Программу я написал, но проблема в том, что в ней изменения сохраняются только при добавлении строк, а при изменении существующих строк изменения не сохраняются.
Кто знает в чем может быть проблема?????
Вот сам код:
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);
    }
  }
}
Технологии: C#, Microsoft Access
 
Ответ # 1 # · +  +  дата добавления: 16.11.2010 / 11:44
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


// Create the DataAdapter.
da = new OleDbDataAdapter("SELECT * FROM [Sheet1$]",
ConfigurationSettings.AppSettings["Excel_0115_ConnectString"]);

// Create the insert command.
String insertSql = "INSERT INTO [Sheet1$] " +
"(CategoryID, CategoryName, Description) " +
"VALUES (?, ?, ?)";
da.InsertCommand =
new OleDbCommand(insertSql, da.SelectCommand.Connection);
da.InsertCommand.Parameters.Add("@CategoryID", OleDbType.Integer, 0,
"CategoryID");
da.InsertCommand.Parameters.Add("@CategoryName", OleDbType.Char, 15,
"CategoryName");
da.InsertCommand.Parameters.Add("@Description", OleDbType.VarChar, 100,
"Description");

// Create the update command.
String updateSql = "UPDATE [Sheet1$] " +
"SET CategoryName=?, Description=? " +
"WHERE CategoryID=?";
da.UpdateCommand =
new OleDbCommand(updateSql, da.SelectCommand.Connection);
da.UpdateCommand.Parameters.Add("@CategoryName", OleDbType.Char, 15,
"CategoryName");
da.UpdateCommand.Parameters.Add("@Description", OleDbType.VarChar, 100,
"Description");
da.UpdateCommand.Parameters.Add("@CategoryID", OleDbType.Integer, 0,
"CategoryID");

// Fill the table from the Excel spreadsheet.
dt = new DataTable( );
da.Fill(dt);
// Define the primary key.
dt.PrimaryKey = new DataColumn[] {dt.Columns[0]};

// Records can only be inserted using this technique.
dt.DefaultView.AllowDelete = false;
dt.DefaultView.AllowEdit = true;
dt.DefaultView.AllowNew = true;
// Bind the default view of the table to the grid.
dataGrid.DataSource = dt.DefaultView;
 
Страница: 1 + Создать новую тему