Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
.NET 4.x

Создание класса для подключение к БД

17.02.2017, 13:51. Показов 10056. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, делаю программу(там работа с БД) у меня будет много форм, и я решил, создать класс, что бы код не дублировать, но не много запуталься, вот как лучшие
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
class SQLiteClass
    {
        private string name_db;
 
        public SQLiteClass(string name_db)
        {
            this.name_db = name_db;
 
        }
 
        public SQLiteClass()
        {
            this.name_db = "Library.db";
        }
 
        public bool Connection()
        {
            if (!File.Exists(this.name_db))
            {
 
                return false;
            }
 
            SQLiteConnection conn = new SQLiteConnection("Data Source=this.name_db; Version=3;");
 
            try
            {
                conn.Open();
                
            }
 
            catch (SQLiteException ex)
            {
                MessageBox.Show(ex.Message);
            }
 
            return true;
 
        }
Или все в конструтори
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
class SQLiteClass
    {
        private string name_db;
 
        public SQLiteClass(string name_db)
        {
            name_db = this.name_db;
 
            if(!File.Exists(name_db))
            {
                MessageBox.Show("База данных не найдена");
            }
 
            SQLiteConnection conn = new SQLiteConnection("Data Source=fname_db; Version=3;");
 
            try
            {
                conn.Open();
            }
 
            catch(SQLiteException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
            
           
    }
Мне кажеться первый вариант лучшие, так как я проверю если ли БД если нету просто закрою программу, может что то подправите
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2017, 13:51
Ответы с готовыми решениями:

Создание экземпляра класса-наследника для переменной с типом базового класса
Подскажите чайнику как создается экземпляр класса BC BaseClass BC = new DerivedClass(); Вопрос: BC - это экземпляр класса BaseClass...

Создание тестового класса (метода) для готового класса в Java
Может я чего-то не понимаю. Так вот.Припустим я создал готовый класс в Java,который выполняет какие-то действия.но его нужно...

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

38
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
17.02.2017, 21:02  [ТС]
Студворк — интернет-сервис помощи студентам
вопрос как узнать что подключились к БД ?
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
18.02.2017, 15:36
если не упало в catch значит подключился
хотя с файловыми говнбд бывают особенности и проще сделать какой-нибудь select 1 для надежности
0
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
18.02.2017, 19:38  [ТС]
Цитата Сообщение от m0nax Посмотреть сообщение
если не упало в catch значит подключился
хотя с файловыми говнбд бывают особенности и проще сделать какой-нибудь select 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
 public bool login(string table, string login, string password)
        {
            SQLiteCommand cmd = this.connect.CreateCommand();
 
            string query = "SELECT * FROM "+table+" WHERE user == "+login+ " AND password == "+password;
 
            cmd.CommandText = query;
            
            try
            {
                cmd.ExecuteNonQuery();
 
                return true;
 
            }
 
            catch(SQLiteException ex)
            {
                return false;
            }
 
          
        }
Передать ошибку catch в Windows Form,

Добавлено через 13 минут
Да что то запрос не работает
0
Эксперт .NET
 Аватар для Usaga
14759 / 9532 / 1365
Регистрация: 21.01.2016
Сообщений: 35,957
19.02.2017, 05:30
Matroskin_Kot, я думаю, тебе нужно освежить свои знания о исключения.

Добавлено через 1 минуту
Цитата Сообщение от Matroskin_Kot Посмотреть сообщение
Да что то запрос не работает
Почитай про исключения по ссылке выше и научись читать сообщени об ошибках, которые содержатся в исключении.
0
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
19.02.2017, 10:04  [ТС]
А почему запрос не работает, должно было выполниться в
0
Эксперт .NET
 Аватар для Usaga
14759 / 9532 / 1365
Регистрация: 21.01.2016
Сообщений: 35,957
19.02.2017, 10:54
Цитата Сообщение от Matroskin_Kot Посмотреть сообщение
А почему запрос не работает
Наверное потому, что у тебя в SQL-запросе двойное равно стоит, что недопустимо.

Добавлено через 45 секунд
Сообщение об этом наверняка было в исключении...
0
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
20.02.2017, 09:19  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Наверное потому, что у тебя в SQL-запросе двойное равно стоит, что недопустимо.
Не могу понять почему запрос не выполняеться я перенес код в косоль,
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SQLite;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            SQLiteConnection connect = new SQLiteConnection("Data Source=Library.db; Version=3;");
 
            try
            {
                connect.Open();
 
                SQLiteCommand cmd = connect.CreateCommand();
 
                string query = "SELECT * FROM user WHERE user = admin AND password = admin";
 
                cmd.CommandText = query;
 
                try
                {
                    cmd.ExecuteNonQuery();
 
                    Console.WriteLine("Запрос Выполнин");
 
                }
 
                catch (SQLiteException ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
 
            catch (SQLiteException ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}
А вот ошибка какя вылитает
0
Эксперт .NET
 Аватар для Usaga
14759 / 9532 / 1365
Регистрация: 21.01.2016
Сообщений: 35,957
20.02.2017, 09:40
Matroskin_Kot, текстовые литералы нужно в кавычки заключать:

SQL
1
SELECT * FROM USER WHERE USER = 'admin' AND password = 'admin'
А лучше передавать аргументы через специальное API, а не прямо в строке запроса.
0
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
20.02.2017, 09:51  [ТС]
Подскажите логика хоть правельная ?
0
Эксперт .NET
 Аватар для Usaga
14759 / 9532 / 1365
Регистрация: 21.01.2016
Сообщений: 35,957
20.02.2017, 09:53
Matroskin_Kot, вроде как. Только непонятно зачем ты блок try\catch вложил один в другой блок. Смысл сего действа в чём?
0
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
20.02.2017, 09:58  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
вроде как. Только непонятно зачем ты блок try\catch вложил один в другой блок. Смысл сего действа в чём?
Отлавливаю исключения )))
Еще такой вопрос ExecuteNonQuery возращает количество выполнинин запросов правельно ?
0
Эксперт .NET
 Аватар для Usaga
14759 / 9532 / 1365
Регистрация: 21.01.2016
Сообщений: 35,957
20.02.2017, 10:02
Matroskin_Kot, если верить документации, то оно возвращает количество строк затронутых запросом.

Цитата Сообщение от Matroskin_Kot Посмотреть сообщение
Отлавливаю исключения
Это можно сделать в одном блоке try\catch.
0
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
20.02.2017, 10:03  [ТС]
Нашел баг(((
Если ввести не верные данные все равно проходит авторизация, почему не могу понять
0
Эксперт .NET
 Аватар для Usaga
14759 / 9532 / 1365
Регистрация: 21.01.2016
Сообщений: 35,957
20.02.2017, 10:06
Цитата Сообщение от Matroskin_Kot Посмотреть сообщение
Если ввести не верные данные все равно проходит авторизация, почему не могу понять
А если попробовать воспользоваться отладчиком?..
0
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
20.02.2017, 11:03  [ТС]
да в отладчик все нормально попадает
0
Эксперт .NET
 Аватар для Usaga
14759 / 9532 / 1365
Регистрация: 21.01.2016
Сообщений: 35,957
20.02.2017, 11:06
Цитата Сообщение от Matroskin_Kot Посмотреть сообщение
да в отладчик все нормально попадает
Зашибись. Осталось пройтись по коду программы и посмотреть что и как в ней происходит. Если что я именно это имел в виду упоминая отладчик.
0
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
20.02.2017, 15:46  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Зашибись. Осталось пройтись по коду программы и посмотреть что и как в ней происходит. Если что я именно это имел в виду упоминая отладчик.
да вроде бы все парельно, можете глянуть код
Учет картриджей.zip
0
 Аватар для CSharp
51 / 51 / 14
Регистрация: 12.01.2013
Сообщений: 779
22.02.2017, 18:06
Вот ваш метод авторизации в classe ConectDB
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        //Метод авторизации 
 
        public bool login(string table, string login, string password)
        {
            SQLiteCommand cmd = this.connect.CreateCommand();
 
            string query = "SELECT * FROM "+table+" WHERE user = '"+login+ "' AND password = '"+password+"'";
 
            cmd.CommandText = query;
 
            if (cmd.ExecuteScalar() != null)
            {
                return true;
            }
 
            else
            {
                return false;
            }
 
        }
1
4 / 4 / 3
Регистрация: 10.05.2016
Сообщений: 1,117
23.02.2017, 11:03  [ТС]
Да теперь нормально работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2017, 11:03

Подключение внешнего класса к XAML для использования в привязке данных
Здравствуйте. У меня возник вопрос - каким образом можно подключить класс из .cs файла к XAML так, чтобы его можно было потом...

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

Создание класса для строк
Строка должна храниться как массив символов. Необходимо предусмотреть способы получения внутренних строк в классе, замены всех символов в...

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

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


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru