none
Подключение к Access RRS feed

  • Общие обсуждения

  • Данная статья восстановлена из кэша гугла.

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

     


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

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

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

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

     

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

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

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


    Первоначально понадобится таблица с данными в файле Access.


    Имя файла db1.mdb, таблица People c данными:

     

    People Table

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

     

    Часть 1

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

     

    Создаем новый Windows Forms проект.

    File → New → Project → Windows → Windows Forms Application и называем его VisualAccessConnect

     

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

     

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

     

    Select All Tables

     

    Жмем Finish


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


    DataSet and TableAdapter

     

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

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


    Select People

     

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

     

    First Run

     

    Если у вас вывалилось исключение - the 'microsoft.jet.oledb.4.0' provider is not registered on the local machine

    Вам необходимо зайти в настройки проекта и выставить Platform Target x86


    Error img

     

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

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

     

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

     

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

     

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

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

     

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

     

     

    Часть 2

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

     

    Создаем новый Windows Forms проект.

    File → New → Project → Windows → Windows Forms Application и называем его VisualAccessConnectViaFilePath

     

    Нажимаем View → Server Explorer или ctrl + W + L

    Вызываем контекстное меню у Data Connections → Add Connection


    Add connetion

     

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


    Change Data source

     

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


    Microsoft Access Database File

     

     

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

     

    File Path

     

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


    Add Project Data Source

     

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

     

    Choose NO

     

    После чего в открывшемся мастере выбираем таблицу People ( см часть1) и ОК

    Так же добавляем кнопку для сохранения изменений, аналогично как и в первой части.

     

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

     

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

     

    Часть 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();

    }

    }

     

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

    • Изменено Abolmasov Dmitry 10 ноября 2010 г. 7:24 обновление
    13 октября 2010 г. 9:26

Все ответы