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

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

11.03.2019, 22:17. Показов 2649. Ответов 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
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
12.03.2019, 05:12
SQLite + Entity Framework чем не угодил?
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,299
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
1501 / 1237 / 248
Регистрация: 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
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
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
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,299
13.03.2019, 04:03
Iangyl, серьёзно? Оно вам одним коротким предложением русским языком сообщает, что не так. Что до такой-то степени уже голову не включать?

Цитата Сообщение от Iangyl Посмотреть сообщение
поставил скобочки в запросах(для названия таблицы).
Не надо использовать ключевые слова языка SQL диалекта SQLite в виде идентификаторов, тогда не понадобится использовать квадратные скобки. Table (таблица) - плохое имя для таблицы. У таблицы есть какой-то смысл (определяется содержанием), этот смысл и нужно отражаться в названии: Accounts, Users, Orders, Invoices...
1
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 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
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,299
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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru