воскресенье, 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, сделаем двойной клик мышью, на ней, и впечатаем следующий код в обработчике события

  1. 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

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

  1. using System;  
  2. using System.Data;  
  3. using System.Data.OleDb;  
  4.   
  5. class AccessConnectPureCode  
  6. {  
  7.     public static void Main()  
  8.     {  
  9.         string connectionString = @"provider=Microsoft.Jet.OLEDB.4.0; data source=C:\Data\db1.mdb";  
  10.         OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);  
  11.         OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();  
  12.         myOleDbCommand.CommandText = "SELECT * FROM People";  
  13.         myOleDbConnection.Open();  
  14.           
  15.         // Считываем данные  
  16.         OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader();  
  17.         while (myOleDbDataReader.Read())  
  18.         {  
  19.             Console.WriteLine(string.Format("Id: {0}, Name: {1}, Birthday: {2}",  
  20.                 myOleDbDataReader["Код_People"],  
  21.                 myOleDbDataReader["Имя"],  
  22.                 myOleDbDataReader["ДатаРождения"]));  
  23.         }  
  24.         myOleDbDataReader.Close();  
  25.   
  26.         // Вносим изменения  
  27.         OleDbCommand changeDashaName = myOleDbConnection.CreateCommand();  
  28.         changeDashaName.CommandText = @"UPDATE People SET Имя = 'Даша' WHERE Имя = 'Dasha'";  
  29.         changeDashaName.ExecuteNonQuery();  
  30.   
  31.         myOleDbConnection.Close();  
  32.     }  
  33. }  


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

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