Visual Studio 2010 (C#): ADO .NET - подключение к БД Access 2010
Возникла необходимость поработать с базой Access. В процессе возникли сложности.
Лезу в Данные->Добавить новый источник данных->База данных->Набор данных->Создать подключение
Источником выбираю Файл БД Access.
Указываю файл БД.
В дополнительных параметрах проверяю драйвер - Microsoft.ACE.OLEDB.12.0. Еще есть Microsoft.Jet.OLEDB.4.0.
Жму "Ок", получаю ошибку:
Лезу в Администрирование->Источники данны (ODBC)->Драйверы.
А у тамошнего Microsoft Access Driver версия 14! Но в VS он не отображается - почему? Это первый вопрос.
Двигаемся дальше. На закладке пользовательских интерфейсов создаю новый источник данных. В дополнительных параметрах указываю драйвер - Microsoft.ACE.OLEDB.14.0, задаю путь к файлу. Пытаюсь подключиться в VS, исопльзуя его.
Получаю:
OS: Windows 7 x64
Параметры сборки: для x64
На машине установлен Office 2010 с 98% вероятностью также x64.
Для верности поверх всего этого ставился AccessDatabaseEngine_x64 2010 (правда, его эффекта я не заметил - список провайдеров не изменился, или он включает в себя только последнюю версию? и если да, то переписалась ли она, или нужно сносить оффис, потом ставить ее и потом снова оффис?)
И в заключение:
1) Беглый поиск по гуглу выдал море решенных и нерешенных проблем, связанных с подключением к базам Access 2007, 2010.
2) Подключение в VS требовалось только для построения объектной модели - никогда прежде этого не делал.
3) Программа будет выполняться на машинах с WinXP и Win7. Как на x86, так и на x64. С установленным Office 2003, 2007, 2010 или без него.
4) И все это как-то должно работать.
В связи с этим, прошу знатаков помочь. Возможно ли решить эту проблему, и из-за чего она возникла? Надо ли ее решать вообще? БД должна быть в виде файла и открываться без SQL-сервера, при этом accdb - лишь вариант. Подойдет любая другая независимая БД. Достаточно шустрая и имеющая возможность хранить в себе значительные объемы данных. И, наконец, все это должно легко и непринужденно распространяться на другие машины с установленным .NET 4.0. Если поптуно нужно будет установить AccessDatabaseEngine - не беда, хотя и не желательно. Но без плясок с бубном вокруг переустановки оффиса и прочих приложений.
Буду благодарен за любую помощь. Дельные советы приветствуются!
Попутно выяснил, что я балбес (искал OleDB провайдеры в списке драйверов ODBC). Дальше все было просто, соединение установить удалось. Попробую теперь подключить BLToolkit. Но вот вопрос - по прежнему не могу подключить источник к Visual Studio! Беру ту же строку соединения. А в результате - ошибка архитектуры. Хотя в свойствах указана сборка под х64. =\
Что ж, придется обходиться без ADO .NET.
BLToolkit сразу подключился, без проблем увидел этот самый Microsoft.ACE.OLEDB.12.0 и вывел результаты запроса к базе. Мистика. Что ж, буду пользовать его.
Оlga, спасибо за попытку помочь. :)
{
public partial class Form1 : Form
{
OleDbConnection connect = new OleDbConnection(); // создаем обьект соединения
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) /// загрузка формы на экран
{
connect.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Начисление_зарплаты_2003.mdb"; // строка с параметрами соединения
connect.Open(); // открваем соединение
ReadData();
}
public void ReadData() /// метод вычитывает данные из БД
{
OleDbCommand command = new OleDbCommand("SELECT Sotrudniki.Tab_nom,Sotrudniki.LastName,Sotrudniki.FirstName,Sotrudniki.SureName FROM Sotrudniki WHERE Sotrudniki.id, connect);
OleDbDataReader reader = command.ExecuteReader(); // создаем обьект чтения =
while (reader.Read() != false)
{
ListViewItem item = listView1.Items.Add(new ListViewItem());
item.Text = (reader.GetInt32(reader.GetOrdinal("Tab_nom"))).ToString();
item.SubItems.Add(reader.GetString(reader.GetOrdinal("LastName")));
item.SubItems.Add(reader.GetString(reader.GetOrdinal("FirstName")));
item.SubItems.Add(reader.GetString(reader.GetOrdinal("SureName")));
}
reader.Close();
}
Microsoft.Jet.OLEDB.4.0 -стандартная майкросовская , еще неустановленный оффисы база открываются =)