Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495

Создание локальной БД. Создание класса для работы с БД. Ошибка подключения к БД

11.03.2019, 22:17. Показов 2596. Ответов 16

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Нужно создать БД и создать класс для работы с ним - методы: добавление, удаления, просмотр самой базы, сортировка.

Тема: телефонная книга(ФИО, адресс, номер телефона).
Исключения:
Кликните здесь для просмотра всего текста

Вот само исключение:

Вот путь к файлу БД:

Вот сам файл:
Название: file.PNG
Просмотров: 66

Размер: 1.1 Кб
Код:
Кликните здесь для просмотра всего текста

Вот код класса:
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
class WorkPlaceDB
    {
        private Database1DataSet table = new Database1DataSet();
        private SqlConnection connect = null;
 
        public WorkPlaceDB()
        {
 
        }
 
        public void OpenConnection(string connectionAdress)
        {
            connect = new SqlConnection(connectionAdress);
            connect.Open();
        }
 
        public void CloseConnection()
        {
            connect.Close();
        }
 
        public void Add(string secondName, string Name, string fatherName, string adress, string phoneNum)
        {
            string sql = string.Format("Insert into Phone Book:\n" + 
                "Example(Trap, Ivan, Ivanovych, Brooklin str 123/2, +380684727610)\n" + 
                "Values(@secondName, @Name, @fatherName, @adress, @phoneNum)");
            using (SqlCommand cmd = new SqlCommand(sql, this.connect))
            {
                cmd.Parameters.AddWithValue("@secondName", secondName);
                cmd.Parameters.AddWithValue("@Name", Name);
                cmd.Parameters.AddWithValue("@fatherName", fatherName);
                cmd.Parameters.AddWithValue("@adress", adress);
                cmd.Parameters.AddWithValue("@phoneNum", phoneNum);
 
                cmd.ExecuteNonQuery();
            }
        }
 
        public void Delete(string phoneNum)
        {
            string sql = phoneNum;
 
            using (SqlCommand cmd = new SqlCommand(sql, this.connect))
            {
                cmd.Parameters.Clear();
 
                cmd.ExecuteNonQuery();
            }
        }
 
        public void Change(string adress, string phoneNum)
        {
            string sql = string.Format("Update information set adress = '{0}' Where man phoneNum = '{1}'", adress, phoneNum);
            using (SqlCommand cmd = new SqlCommand(sql, this.connect))
            {
                cmd.ExecuteNonQuery();
            }
        }
 
        public DataTable GetInfo()
        {
            DataTable inv = new DataTable();
            string sql = "Select * From Inventory";
            using (SqlCommand cmd = new SqlCommand(sql, this.connect))
            {
                SqlDataReader dr = cmd.ExecuteReader();
                inv.Load(dr);
                dr.Close();
            }
            return inv;
        }
    }
Вот код мэйна:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Work();
        }
 
        public void Work()
        {
            WorkPlaceDB table = new WorkPlaceDB();
            table.OpenConnection(@"Data Source = D:\Lenovo\Документы\Praktika OOP\Praktika\Day4\dbo.Table.sql");
            dataGridView1.DataSource = table.GetInfo();
        }
    }
Вот WF:

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2019, 22:17
Ответы с готовыми решениями:

Создание класса для работы со строками
Помогите пжл написать программу: Создать класс для работы сo строками. Разработать следующие элементы класса: a. Поля: ...

Создание класса для работы с матрицей
Привет всем!!!! Уважаемые!! Не могли бы вы мне помочь написать програмку! Вот на такую тему: Программирование вычислительныых...

Создание класса для работы с датой
Задание 10. Самостоятельно изучите тип данных DateTime, на основе которого необходимо создать класс для работы с датой. Данный класс...

16
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
11.03.2019, 22:18  [ТС]
Забыл добавить суть вопроса: Почему выскакивает исключение, что я не так пишу в постановке пути подключения?
0
Неадекват
 Аватар для freeba
1499 / 1236 / 247
Регистрация: 02.04.2010
Сообщений: 2,807
12.03.2019, 05:12
SQLite + Entity Framework чем не угодил?
0
Эксперт .NET
 Аватар для Usaga
14071 / 9289 / 1346
Регистрация: 21.01.2016
Сообщений: 34,846
12.03.2019, 05:38
Цитата Сообщение от Iangyl Посмотреть сообщение
что я не так пишу в постановке пути подключения?
Мы не знаем. Вы не показали строку подключения.

Цитата Сообщение от Iangyl Посмотреть сообщение
Вот сам файл:
Это файл SQL-скрипта. Предположительно создающего (при выполнении) таблицу в базе. Это не база данных. Тоже самое, что считать, что *.CS программа и ждать, что она запустится и заработает после двойного щелчка по такому файлу.
0
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
12.03.2019, 13:13  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Мы не знаем. Вы не показали строку подключения.
C#
1
table.OpenConnection(@"Data Source = D:\Lenovo\Документы\Praktika OOP\Praktika\Day4\dbo.Table.sql");
Цитата Сообщение от Usaga Посмотреть сообщение
Это файл SQL-скрипта. Предположительно создающего (при выполнении) таблицу в базе. Это не база данных. Тоже самое, что считать, что *.CS программа и ждать, что она запустится и заработает после двойного щелчка по такому файлу.
Что тогда с ним нужно делать? Жалко, что мне препод не удосужился сказать, что это не БД, я думал, что создаю локальную БД...

Добавлено через 4 минуты
freeba, не знал просто. Я вообще как слепой котёнок учу программирование...
Пока учу одно, задают в колледже делать другое и чтоб сделать то нужно бросать то, что учил и учить то, что задали, чтоб его выполнить.
Если вы скажите учить по программе как дают ибо там какая-то иерархия, то я вам скажу её там нет. Препод - некудышний. Все сам делаю и ищу. У него даже если спрашиваешь что-то он не может нормальный ответ дать, может как программист он нормальный, но как препод - нет.
0
19 / 13 / 7
Регистрация: 05.04.2018
Сообщений: 50
12.03.2019, 13:14
Цитата Сообщение от Iangyl Посмотреть сообщение
Что тогда с ним нужно делать?
Создать базу, в ней создать вашу таблицу и обращаться к ней. Примеров подключения в интернете очень много.
0
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
12.03.2019, 13:19  [ТС]
mustbestronger, то есть этот скрипт совсем не нужен выходит?
0
19 / 13 / 7
Регистрация: 05.04.2018
Сообщений: 50
12.03.2019, 13:35
Цитата Сообщение от Iangyl Посмотреть сообщение
то есть этот скрипт совсем не нужен выходит?
Я не знаю что внутри вашего sql-скрипта (наверное создание таблицы, и не одной). Если установлен mssql, то создать базу, запустить скрипт и посмотреть что вы имеете - дело нескольких кликов мыши.
Да и если смотреть ваш код, таблиц у вас должно быть несколько.
1
Неадекват
 Аватар для freeba
1499 / 1236 / 247
Регистрация: 02.04.2010
Сообщений: 2,807
12.03.2019, 16:50
Iangyl, Посмотрите такое решение https://1drv.ms/u/s!AhlGFPqhjX5lguUBDqweAoKrb2jexg

PS: Архив на форум не влезает - либы SQLite безразмерные, поэтому оставляю ссылку на onedrive.
1
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
13.03.2019, 00:41  [ТС]
freeba, да это очень круто, хоть я мало что понимаю, ну на разбор я точно её оставлю. Спасибо!
0
Эксперт .NET
6690 / 4101 / 1607
Регистрация: 09.05.2015
Сообщений: 9,566
13.03.2019, 01:25
Цитата Сообщение от freeba Посмотреть сообщение
Архив на форум не влезает - либы SQLite безразмерные
А зачем их заливать вместе с проектом когда есть nuget пакеты... Студия сама всё скачает при компиляции...
0
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
13.03.2019, 02:05  [ТС]
Воот, я кое-что исправил, оказалось, что у меня путь подключения не правильный я его изменил + поставил скобочки в запросах(для названия таблицы). Вроде все по феншую. Но выскакивает вот такая штука, почему?
0
Эксперт .NET
 Аватар для Usaga
14071 / 9289 / 1346
Регистрация: 21.01.2016
Сообщений: 34,846
13.03.2019, 04:03
Iangyl, серьёзно? Оно вам одним коротким предложением русским языком сообщает, что не так. Что до такой-то степени уже голову не включать?

Цитата Сообщение от Iangyl Посмотреть сообщение
поставил скобочки в запросах(для названия таблицы).
Не надо использовать ключевые слова языка SQL диалекта SQLite в виде идентификаторов, тогда не понадобится использовать квадратные скобки. Table (таблица) - плохое имя для таблицы. У таблицы есть какой-то смысл (определяется содержанием), этот смысл и нужно отражаться в названии: Accounts, Users, Orders, Invoices...
1
Неадекват
 Аватар для freeba
1499 / 1236 / 247
Регистрация: 02.04.2010
Сообщений: 2,807
13.03.2019, 04:38
Цитата Сообщение от Someone007 Посмотреть сообщение
А зачем их заливать вместе с проектом когда есть nuget пакеты... Студия сама всё скачает при компиляции...

Не по теме:

Увы это не так. SQLite очень капризен или может nuget туповат. Но автовосстановление пакетов для этой субд работает из рук вон плохо.

0
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
15.03.2019, 22:42  [ТС]
Usaga, поменял название таблицы - та же история: Соединение устанавливается.

Добавлено через 35 минут
Внимание!

Всем огромное спасибо за отзывчивость и предложений по решению проблемы!
Проблема была решена. Каким образом?
Ответ следующий: судя по исключению у меня не было постоянного соединения.
Поэтому мне подсказали такой способ реализации:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
         public DataTable GetInfo()
        {
            string sql = "Select * From PhoneBook";
            DataTable inv = new DataTable();
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                using (SqlCommand cmd = new SqlCommand(sql, connection))
                using (SqlDataReader dr = cmd.ExecuteReader())
                    if (dr.HasRows)// если есть данные
                        inv.Load(dr);
            }
            return inv;
        }
Как я понял происходит проверка или по тому соединению есть какие-либо данные и если да - выводит их. Если не правильно понял, буду благодарен за исправление. А +благодаря этой проверке не ругается ExecuteReader, но почему он перестал ругатся - я не знаю
Надеюсь это кому-то поможет.
0
Эксперт .NET
 Аватар для Usaga
14071 / 9289 / 1346
Регистрация: 21.01.2016
Сообщений: 34,846
16.03.2019, 03:45
В сообщении об ошибке русским языком было сказано, что перед тем как ломиться в базу, к не нужно открыть подключение. Т.е. не просто иметь объект SqlConnection, но и вызвать метод Open() перед тем, как выполнять команды. В последнем коде вы это сделали, поэтому всё и заработало.

Далеко же вы пойдёте, если не можете понять, что вам ваше же приложение говорит...
0
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
16.03.2019, 16:32  [ТС]
Usaga, прошу прощения, но на удивление я тоже все это время штаны не протирал - и да я пробывал вызывать метод Open(), только почему-то выскакивала ошибка о том, что раз соединение открыто, то нужно его и закрыть, прописывал закрытие - происходила та же фигня, только в этом варианте который был предложен - такой ошибки при открытии не выскакивало, хотя все, что тут изменилось - дописана 10 строка. И да - работу с БД я еще не учил как вы могли возможно заметить в предложении сверху:
Цитата Сообщение от Iangyl Посмотреть сообщение
Я вообще как слепой котёнок учу программирование...
Пока учу одно, задают в колледже делать другое и чтоб сделать то нужно бросать то, что учил и учить то, что задали, чтоб его выполнить.
Если вы скажите учить по программе как дают ибо там какая-то иерархия, то я вам скажу её там нет. Препод - некудышний. Все сам делаю и ищу. У него даже если спрашиваешь что-то он не может нормальный ответ дать, может как программист он нормальный, но как препод - нет.
Поэтому хоть, я и определился с направлением в сфере, но порядок изучения материала я не знаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2019, 16:32
Помогаю со студенческими работами здесь

Создание службы для работы в локальной сети
Доброго времени суток. Появилась необходимость написать небольшую службу для локальной сети в 40 машин. Не спрашивайте про удаленное...

Создание класса для работы с БД
Добрый день, не могу разобраться, мне надо написать класс, для работы с БД, там должно быть: 1) соединение с БД, и закрытия БД, 2)...

Создание класса для работы с дробями
Напишите программу калькулятор, который позволяет производить действия с дробями. Пользователь вначале вводит: числить первой дроби и затем...

Создание класса для работы с несколькими таблицами БД
Добрый вечер форумчане. Помогите с такой как я думаю не большой(но у меня к сожалению не как не выходит) проблемой. Нужно сделать так...

Создание класса для работы с денежными суммами
Создать класс Money для работы с денежными суммами. Сумма должна быть представлена массивом, каждый элемент которого - десятичная цифра....


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru