Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19

Как подключиться к базе данных Access

24.03.2015, 20:01. Показов 3690. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите решить задачу с подключением БД, созданной в Access2007. Проблема в том, что среда ошибку не выдаёт и не выводит данные в listBox и listView. Скорее всего, БД не подключается, как мне кажется. Но я не знаю, как это исправить.
Вот код программы для Form3, в которой располагаются listBox и listView:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;    // пространство имён для работы с БД
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
public partial class Form3 : Form
    {
        OleDbDataReader dataReader;           // Объявление объекта dataReader
        OleDbConnection conn = null;          // Объявление соединения conn         
 
        public Form3()
        {
            InitializeComponent();
                                 
            // создание и инициализация команды
            OleDbCommand myCommand = new OleDbCommand("SELECT * FROM Неизменяемые_параметры", conn);
 
            try
            {
                string source = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
                    @"Data Source=C:\Users\KIP OSV2\Documents\Елена\Программа\Test_application\Test_application\DBdevicesKIP.accdb";
                // новое соединение с БД
                conn = new OleDbConnection(source);
                // открытие соединения
                conn.Open();                
                dataReader = myCommand.ExecuteReader();
                while (dataReader.Read())
                {
                    // Создаём переменные, получаем для них значения из объекта dataReader,
                    // используя метод GetТипДанных
                    long Number = dataReader.GetInt64(0);
                    string Name = dataReader.GetString(1);
                    string Inv_number = dataReader.GetString(2);
                    // Выводим данные в элемент listBox1
                    listBox1.Items.Add("Порядковый номер: " + Number + "Название прибора: " + Name + "Инвентарный номер: " + Inv_number);
                    // Создаём экземпляр item класса ListViewItem для записи в него данных из dataReader
                    ListViewItem item = new ListViewItem(new string[] { Convert.ToString(dataReader[0]),
                            Convert.ToString(dataReader[1]), Convert.ToString(dataReader[2])});
                    listView1.Items.Add(item);                    
                }
                // Закрытие ридера
                dataReader.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {                
                // закрытие соединения
                conn.Close();
            }
        }
Вот что я пробовала для решения этой проблемы:
1) Создала новый проект с одной формой, куда и выводила данные. Там выходила ошибка, указывающая на строку:
conn.Open();
Здесь я и решила, что просто БД не подключается в моём проекте. Но вот почему – не знаю.
2) Нашла на одном форуме совет: изменить платформу для компиляции проекта на х86. Изменила (Сборка -> Диспетчер конфигураций -> Активная платформа решения). Ничего не изменилось. Всё по-прежнему не работает.
3) Нашла на другом форуме инициализацию БД другим способом, вот пример:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
//using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
 
namespace Kypca4
{
    public partial class Ud_Buf : Form
    {
        OleDbConnectionStringBuilder bldr;
        OleDbConnection cn;
        public Ud_Buf()
        {
            InitializeComponent();
            bldr = new OleDbConnectionStringBuilder();
            bldr.DataSource = Data.str;
            bldr.Provider = "Microsoft.ACE.OLEDB.12.0";
Написано, что это для Access2007. Подскажите, как подключить БД таким способом + комментарии к коду, т.к. впервые работаю с БД в C# и многого не знаю.
Кто-нибудь дайте дельный совет! Заранее спасибо
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.03.2015, 20:01
Ответы с готовыми решениями:

Как подключиться к базе данных Access на хостинге?
подключение_кБазеДанных = new OleDbConnection(@"Data Source = ftp://login:password@ttt.timeweb.ru/DB.mdb; User ID=Admin;...

Как подключиться к базе данных
Доброго времени суток друзья, хочу подключить Oracle DataBase к С # , для начало просто бы хотелось сделать функцию проверяющею прошло ли...

Как подключиться к Базе данных денвера
Установил денвер. В phpMyAdmin создал базу данных Museum2. Есть код, чтобы вывести все записи из таблицы: using System; using...

12
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
25.03.2015, 12:56
Елена01, попробуйте использовать другой драйвер
C#
1
2
_connString = @"Provider=Microsoft.Jet.OLEDB.4.0; 
                        Data Source=" + Path;
1
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
25.03.2015, 19:10  [ТС]
Попробую, напишу, что получилось.
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
26.03.2015, 19:53  [ТС]
Попробовала, как вы и писали. При этом я создала новое приложение с одной формой, на которой разместила listBox и listView. Ниже – код нового приложения:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;    // пространство имён для работы с БД
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        OleDbDataReader dataReader;           // Объявление объекта dataReader       
 
        public Form1()
        {
            InitializeComponent();
 
            OleDbConnection conn = null;          // Объявление соединения conn 
            OleDbCommand myCommand = new OleDbCommand("SELECT * FROM Неизменяемые_параметры", conn);
 
            try
            {
                string source = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\KIP OSV2\Documents\Елена\Программа\WindowsFormsApplication1\WindowsFormsApplication1\DBdevicesKIP.mdb";
                // новое соединение с БД
                conn = new OleDbConnection(source);
                // открытие соединения
                conn.Open();                
                dataReader = myCommand.ExecuteReader();
                while (dataReader.Read())
                {
                    // Создаём переменные, получаем для них значения из объекта dataReader,
                    // используя метод GetТипДанных
                    long Number = dataReader.GetInt64(0);
                    string Name = dataReader.GetString(1);
                    string Inv_number = dataReader.GetString(2);
                    // Выводим данные в элемент listBox1
                    listBox1.Items.Add("Порядковый номер: " + Number + "Название прибора: " + Name + "Инвентарный номер: " + Inv_number);
                    // Создаём экземпляр item класса ListViewItem для записи в него данных из dataReader
                    ListViewItem item = new ListViewItem(new string[] { Convert.ToString(dataReader[0]),
                            Convert.ToString(dataReader[1]), Convert.ToString(dataReader[2])});
                    listView1.Items.Add(item);                    
                }
                // Закрытие ридера
                dataReader.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {                
                // закрытие соединения
                conn.Close();
            }
        }
    }
}
При этом выходит следующая ошибка (см. прикреплённый скриншот).

Строка 32:
dataReader = myCommand.ExecuteReader();

Насколько я понимаю, ошибка указывает на то, что БД не подключена. В чём здесь может быть причина?
Миниатюры
Как подключиться к базе данных Access  
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.03.2015, 20:29
Цитата Сообщение от Елена01 Посмотреть сообщение
Насколько я понимаю
Вы не верно понимаете. Вам ошибка все говорит, там черным по белому написано, что свойство Connection не инициализированно.
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
27.03.2015, 16:53  [ТС]
Именно, я не понимаю. Поэтому и пишу на этом форуме.
Тогда объясните мне, какое это свойство Connection не инициализировано?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
27.03.2015, 17:50
Елена01, вы сильно много не понимаете ... Нужно пытаться разбираться.
C#
1
2
 OleDbConnection conn = null;          // Объявление соединения conn 
OleDbCommand myCommand = new OleDbCommand("SELECT * FROM Неизменяемые_параметры", conn);
Здесь вы передаете в комманду null, вместо коннекшна, так как conn = null. В результате вы и получаете исключение о неинициализированном соединении. Создавайте команду после того, как создаете соединение.
1
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
30.03.2015, 17:03  [ТС]
Я поняла, где была моя ошибка. Исправила её. Всё заработало) Но теперь я поняла, что меня волнует совсем другое. Я не могу получить информацию из БД из дочернего окна моего приложения, а не из главного. В главное окно – форму 1- выводится информация (см. 1-ый скриншот). Далее при двойном клике мыши по рисунку (выходит соответствующая подсказка) (см. скриншот 2) появляется форма 2 с рисунками (см. скриншот 3). И при нажатии кнопкой маши на первом рисунке – задвижке – появляется следующая форма (см. скриншот 4), в которую должна выводиться информация из БД о задвижке. Но она не выводится! И не возникает никакой ошибки при запуске этого проекта. Что здесь не так? Ведь форма 1 свидетельствует о том, что к БД можно подключиться и информация из неё доступна. Почему то же самое не получается сделать для формы 3? Ниже привела код программы для 1-ой и 3-ей форм:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;    // пространство имён для работы с БД
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Test_application
{
    public partial class Form1 : Form
    {
        OleDbDataReader dataReader;           // Объявление объекта dataReader      
 
        public Form1()
        {
            InitializeComponent();
 
            OleDbConnection conn = null;          // Объявление соединения conn
 
            try
            {               
                string source = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
                    @"Data Source=C:\Users\KIP OSV2\Documents\Елена\Программа\Test_application\Test_application\DBdevicesKIP.accdb";
                // новое соединение с БД
                conn = new OleDbConnection(source);
                // открытие соединения
                conn.Open();
                // создание и инициализация команды
                OleDbCommand myCommand = new OleDbCommand("SELECT * FROM Неизменяемые_параметры", conn);
                dataReader = myCommand.ExecuteReader();
                while (dataReader.Read())
                {
                    // Создаём переменные, получаем для них значения из объекта dataReader,
                    // используя метод GetТипДанных
                    long Number = dataReader.GetInt32(0);
                    string Name = dataReader.GetString(1);
                    string Inv_number = dataReader.GetString(2);
                    // Выводим данные в элемент listBox1
                    listBox1.Items.Add("Порядковый номер: " + Number);
                    listBox1.Items.Add("Название прибора: " + Name);
                    listBox1.Items.Add("Инвентарный номер: " + Inv_number);
                    listBox1.Items.Add(" ");
                }
                // Закрытие ридера
                dataReader.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                // закрытие соединения
                conn.Close();
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            toolTip1.SetToolTip(pictureBox1, "Дважды щёлкните на данный объект," + "\n" + "чтобы получить информацию о приборах," + "\n" + "расположенных в нём");
        }
 
        private void pictureBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            Form2 f2 = new Form2(this);
            f2.Show();
        }
    }
}
Код для формы 3:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;    // пространство имён для работы с БД
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Test_application
{
    public partial class Form3 : Form
    {
        OleDbDataReader dataReader;           // Объявление объекта dataReader          
 
        public Form3()
        {
            InitializeComponent();
 
            OleDbConnection conn = null;          // Объявление соединения conn
 
            try
            {
                string source = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
                    @"Data Source=C:\Users\KIP OSV2\Documents\Елена\Программа\Test_application\Test_application\DBdevicesKIP.accdb";
                // новое соединение с БД
                conn = new OleDbConnection(source);
                // открытие соединения
                conn.Open();
                // создание и инициализация команды
                OleDbCommand myCommand = new OleDbCommand("SELECT * FROM Неизменяемые_параметры", conn);
                dataReader = myCommand.ExecuteReader();
                while (dataReader.Read())
                {
                    // Создаём переменные, получаем для них значения из объекта dataReader,
                    // используя метод GetТипДанных
                    long Number = dataReader.GetInt32(0);
                    string Name = dataReader.GetString(1);
                    string Inv_number = dataReader.GetString(2);
                    // Выводим данные в элемент listBox1
                    listBox1.Items.Add("Порядковый номер: " + Number);
                    listBox1.Items.Add("Название прибора: " + Name);
                    listBox1.Items.Add("Инвентарный номер: " + Inv_number);
                    listBox1.Items.Add(" ");
                }
                // Закрытие ридера
                dataReader.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                // закрытие соединения
                conn.Close();
            }
        }
 
        private Form2 _f2;               
        public Form3 (Form2 f2)
        {
            InitializeComponent();
            _f2 = f2;
        }
    }
}
Миниатюры
Как подключиться к базе данных Access   Как подключиться к базе данных Access   Как подключиться к базе данных Access  

Как подключиться к базе данных Access  
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
30.03.2015, 17:13
а зачем вы в формах дублируете код ? для чего по-вашему был придуман ООП ?
не проще ли либо в 1 форме вообще не работать с базой либо просто во вторую форму передавать источник данных ? 1 строчку кода дебажить куда легче чем 30
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
30.03.2015, 17:22
Елена01, что же вы помелолчились? Выкладывали бы тогда код и второй формы тоже! У вас в 3-ей форме 2 конструктора, которые делают абмолютно разные вещи. Один заполняет listBox, а второй задает ссылку на вторую форму. Какой из этих конструкторов вы используете для создания своей третьей формы?
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
30.03.2015, 19:31  [ТС]
Я в 1-ой форме и не буду работать с базой данных. Я это сделала для проверки работоспособности listbox'а, передаются туда данные из БД или нет. Этого объекта вообще там не будет. У меня же вообще ничего не получалось до этого.

Добавлено через 4 минуты
3-я форма у меня появляется при одном клике на определённую картинку во 2-ой форме.

Добавлено через 3 минуты
Код из 3-ей формы:

C#
1
2
3
4
5
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            Form3 f3 = new Form3(this);
            f3.Show();
        }
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
30.03.2015, 19:48
Лучший ответ Сообщение было отмечено Елена01 как решение

Решение

Елена01, что и требовалось доказать. У вас выполняется конструктор Form3 (Form2 f2), в то время как запрос к БД выполняется в конструкторе Form3 (). Измените второй конструктор следующим образом:
C#
1
2
3
4
5
6
              
        public Form3 (Form2 f2)
                : this ()
        {
            _f2 = f2;
        }
1
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
31.03.2015, 19:40  [ТС]
Завтра попробую. Отвечу, что получилось или не получилось)

Добавлено через 23 часа 43 минуты
Ур-ра! Зар-работало! (Кот Матроскин) Спасибо за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2015, 19:40
Помогаю со студенческими работами здесь

Как подключиться к базе данных MySQL на хостинге
Как подключиться к базе данных? База данных MySQL на хостинге?

Как подключиться к локальной базе данных .mdf?
Знаю, как подключиться к БД, которая создана в MS SQL. Но вот как подключиться к локальной БД я не знаю. Подскажите, пожалуйста

Как подключиться к базе данных, расположенной на хостинге timeweb
Здравствуйте. Подскажите пожалуйста с таким вопросом: Пытаюсь подключиться к базе данных, расположенной на хостинге timeweb (язык C#) ...

Как подключиться к базе данных SQL из приложения Xamarin android
Всем привет. Мне нужна помощь с подключением к бд sql через приложение (Xamarin android) в телефоне, для получения или передачи данных.

Как подключиться к конкретной базе данных при работе с EF Code First
Я хочу подключиться к конкретной базе данных при работе с EF Code First. Как мне это сделать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru