воскресенье, 20 июня 2010 г.

Подключение к Access

Редакция статьи от 26.04.2013

В своей работе я буду использовать Visual Studio 2008 Pro & C#

Довольно часто на форуме всплывает данный вопрос, по сему решил обобщить разрозненную информацию в данном сообщении.

Я покажу в трех частях как можно подключиться и взаимодействовать с файлом базы данных Access.

Часть 1 - Где с помощью визуальных средств добавляем к нашему проекту копию файла данных.

Часть 2 - Где с помощью визуальных средств подключаем существующий файл без создания копии в проекте.

Часть 3 - Чисто код.

Первоначально понадобится таблица с данными в файле Access.
Имя файла db1.mdb, таблица People c данными:



Код_People — Счетчик, Имя — Текст, ДатаРождения — Дата/Время

Скачать Access базу:
https://skydrive.live.com/?cid=3A4FDD8B3B890BE4&id=3A4FDD8B3B890BE4%21315
зеркало:
https://drive.google.com/folderview?id=0B1sG6jmDKzlvT2JQY0prWGNNelE

Часть 1
Где с помощью визуальных средств добавляем к нашему проекту копию файла данных.

Создаем новый Windows Forms проект.
File → New → Project → Windows → Windows Forms Application и называем его VisualAccessConnect

правой кнопкой мыши по проекту → Add → Existing Item... → В типах файлов выбираем Data Fiels → после чего находим наш db1.mdb и жмем ОК.

Автоматически открывается Data Source Configuration Wizard → Отмечаем, что мы хотим выбрать все таблицы.



Жмем Finish.

После чего у нас появляется в проекте строго типизированный DataSet содержащий в себе DataTable People и PeopleTableAdapter



Теперь добавляем на Form1 DataGridView

И в его свойстве DataSource выбираем нашу таблицу People



Все готово к отображению данных и при нажатии ctrl + F5 вы увидите такую картину:



Если у вас вывалилось исключение - the 'microsoft.jet.oledb.4.0' provider is not registered on the local machine
Вам необходимо зайти в настройки проекта и выставить Platform Target x86



Добавим кнопку, которая нам поможет внести изменения в базу.
Перетащим на Form1 Button, сделаем двойной клик мышью, на ней, и впечатаем следующий код в обработчике события

this.peopleTableAdapter.Update(this.db1DataSet.People);


Теперь можно запускать наш проект, вносить изменения в данные и сохранять их.

Некоторые пояснения:

Первоначально, когда мы добавляем файл данных в проект - добавляется его копия, а оригинальный файл остается на своем месте, в неизменном состоянии.

То же самое происходит когда мы нажимаем ctrl + F5 в папку debug копируется копия уже скопированного в наш проект файла данных и если вы сделаете Rebuild проекта, то все изменения откатятся к первоначальному состоянию(так как файл в папку debug будет скопирован вновь из нашего проекта), но в релизной версии все будет работать превосходно.

Если у вас возникли проблемы по первой части, можете посмотреть видео, которое проходит все описанные выше шаги с применением Visual Studio 2010:



Часть 2
Где с помощью визуальных средств подключаем существующий файл без создания копии в проекте.

Создаем новый Windows Forms проект.
File → New → Project → Windows → Windows Forms Application и называем его VisualAccessConnectViaFilePath

Нажимаем View → Server Explorer или ctrl + W + L
Вызываем контекстное меню у Data Connections → Add Connection



В открывшемся окне нажимаем кнопку Change напротив DataSource

ChangeDataSource

И выбираем Microsoft Access Database File

MsAccesDbFile

После чего выбираем путь к нашему файлу и проверяем соединение

TestConnection

Теперь добавляем на форму DataGridView, в его свойстве DataSource выбираем Add Project Data Source

AddPrDataSource

Data Base → И в выпадающем меню выбираем строку подключения к нашему файлу, которую мы создали ранее, после чего появится предупреждение что файл базы находится вне приложения с предложением сделать копию, выбираем NO

alertNO

После чего в открывшемся мастере выбираем таблицу People ( см часть1) и ОК
Так же добавляем кнопку для сохранения изменений, аналогично как и в первой части.

Теперь наше приложение отображает данные с текущего файла данных и изменяет его при сохранении.

Будьте внимательны при развертывании приложения, так как ответственность за путь к файлу данных лежит на ваших плечах.

Если у вас возникли проблемы по второй части, можете посмотреть видео, которое проходит все описанные выше шаги с применением Visual Studio 2010:



Часть 3
Чисто код.

Создадим консольное приложение.
File → New → Project → Windows → Console Application и назовем его AccessConnectPureCode

И полностью заменяем весь автоматически сгенерированный код на

using System;
using System.Data;
using System.Data.OleDb;

class AccessConnectPureCode
{
    public static void Main()
    {
        string connectionString = @"provider=Microsoft.Jet.OLEDB.4.0; data source=C:\Data\db1.mdb";
        OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);
        OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();
        myOleDbCommand.CommandText = "SELECT * FROM People";
        myOleDbConnection.Open();
        
        // Считываем данные
        OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader();
        while (myOleDbDataReader.Read())
        {
            Console.WriteLine(string.Format("Id: {0}, Name: {1}, Birthday: {2}",
                myOleDbDataReader["Код_People"],
                myOleDbDataReader["Имя"],
                myOleDbDataReader["ДатаРождения"]));
        }
        myOleDbDataReader.Close();

        // Вносим изменения
        OleDbCommand changeDashaName = myOleDbConnection.CreateCommand();
        changeDashaName.CommandText = @"UPDATE People SET Имя = 'Даша' WHERE Имя = 'Dasha'";
        changeDashaName.ExecuteNonQuery();

        myOleDbConnection.Close();
    }
}


Нужно проследить, чтоб строка подключения указывала на существующий файл.

Александр Кобелев aka Megano.