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

Извлечение значения атрибута из БД (баг или фича)

19.05.2012, 20:19. Показов 1059. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу приложение базе Access на C#. Столкнулся с неожиданной проблемой : доступ к данным хранящимся в базе. И главное на ровном месте - сначала выполняется авторизация пользователя (данные о которых хранятся в этой же базе в одной из таблиц) - все идет великолепно и корректно. Но другие попытка получить данные из других таблиц в этой базе оканчиваются ничем( , хотя для доступа к ним я использую перегрузку того же метода , что и для доступа к данным о логине и пароле. Соответствие типов данных хранящихся в базе типам переменных которым их присваивают проверял, строку 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
 private string get_true_parametr(string select_string1, string table_for_search1, string attribute_name1)
        {
            string res_true ;
 
           // string select_string = "select * from " + table_for_search1 + ";"; //работает
 
            // string select_string =select_string1; // содержит тоже, что и последующая строка обе неработают в программе , но работают в базе access в SQL-режиме создания запросов
            string select_string = "SELECT tarif_RB.service, tarif_RB.individual, tarif_RB.legal_entity FROM tarif_RB WHERE (((tarif_RB.service) Like '*простое*' And (tarif_RB.service) Like '*письмо*' And (tarif_RB.service) Like '*массой до 20 г*'));";
            string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Data_all.mdb";
            OleDbConnection conn1 = new OleDbConnection(ConnectionString);
            conn1.Open();
            OleDbCommand MyCommand1 = new OleDbCommand();
            MyCommand1.Connection = conn1;
            MyCommand1.CommandText = select_string;
            OleDbDataAdapter dataAdapter1 = new OleDbDataAdapter();
            dataAdapter1.SelectCommand = MyCommand1;
            DataSet ds1 = new DataSet();
            dataAdapter1.Fill(ds1, table_for_search1);
 
            dataGridView1.DataSource = ds1.Tables[table_for_search1].DefaultView; //контроль
 
            BindingSource bs4 = new BindingSource();    
            bs4.DataSource = ds1;
            bs4.DataMember = table_for_search1;
           // label_tmp2.DataBindings.Clear();//на всякий пожарный
 
          label_tmp2.DataBindings.Add(new Binding("Text", bs4, attribute_name1, true));//буфер для извлечения
 
 
            res_true = label_tmp2.Text;
 
            label_tmp2.DataBindings.Clear();
          
            conn1.Close();
 
            return res_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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
private string get_true_parametr() //метод возвращает пароль из базы и инициализирует поля пользователя
        {
                string authorization_string = "SELECT login_user.login, login_user.password, login_user.interface, login_user.user_name FROM login_user WHERE (((login_user.login) Like '" + login_string + "'));";//строка SQL запроса на авторизацию
                string table_for_search_psw = "login_user";
                string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Data_all.mdb";
                OleDbConnection conn = new OleDbConnection(ConnectionString);
                conn.Open();
                OleDbCommand MyCommand = new OleDbCommand();
                MyCommand.Connection = conn;
                MyCommand.CommandText = authorization_string;
                OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
                dataAdapter.SelectCommand = MyCommand;
                DataSet ds = new DataSet();
                dataAdapter.Fill(ds, table_for_search_psw);
 
               
 
                BindingSource bs = new BindingSource();    //извлекаем пароль из базы
                bs.DataSource = ds;
                bs.DataMember = table_for_search_psw;
                label_tmp.DataBindings.Add(new Binding("Text", bs, "password", true)); // криво(( приходится использовать лейбел как буфер для пароля((( 
                string password_true = "";
                password_true = label_tmp.Text;//сохраняем значение пароля 
                label_tmp.DataBindings.Clear();//чистим мусор
                bs.Dispose();
 
                BindingSource bs1 = new BindingSource();
                bs1.DataSource = ds;
                bs1.DataMember = table_for_search_psw;
                label_tmp.DataBindings.Add(new Binding("Text", bs1, "user_name", true));
                user_string = label_tmp.Text;//сохраняем значение имени текущего пользователя 
                label_tmp.DataBindings.Clear();//чистим мусор
                bs1.Dispose();
 
                BindingSource bs2 = new BindingSource();
                bs2.DataSource = ds;
                bs2.DataMember = table_for_search_psw;
                label_tmp.DataBindings.Add(new Binding("Text", bs2, "interface", true));
                user_interface = label_tmp.Text;//сохраняем значение интерфейса текущего пользователя 
                label_tmp.DataBindings.Clear();//чистим мусор 
                bs2.Dispose();
 
                ds.Clear();
                ds.Dispose();
                MyCommand.Dispose();
                conn.Close();
                conn.Dispose();
               
                label_tmp.Text = "";
                return password_true;
            
        }
Для промежуточного контроля об извлечении я использовал дэйтагрид и при использовании строки запроса переданного в параметре в нем отображались только имена полей и пустая строка (и в первом и во втором случаях). но в случае с данными пользователя я получил результат а в другом ничего(свойство текст буферного лейбла даже не изменилось).
Прошу прощения за многабукав. Кто - нибудь, кто лучше меня владеет данной темой(я к сожалению имею лишь поверхностные знания в данной области ), возможно укажет мне на мои ошибки.

Добавлено через 16 часов 41 минуту
Решение найдено. Дело в том что при передаче запроса символ "*" по какой то причине интерпретировался не как маска а как типографский символ "Asterisk".
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.05.2012, 20:19
Ответы с готовыми решениями:

Баг или фича?
Как известно -1^2=1 и math.pow(-1,2) выдает верный результат, но -1 ** 2 выдает -1

Баг или фича?
Всем привет. Вот какая интересная штука происходит с жизненным циклом активити. Если выходить из приложения "механической...

Баг или фича?
Здраствуйте. Читая главу о локализации книги Гослинга, Арнольда, Холмса "Язык программирования Java 3е издание" (господи, люди, может...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2012, 20:19
Помогаю со студенческими работами здесь

Баг или фича
решил проверить на своем VS 2008 присвоение в сравнении написал char buf; char *buf1; if(buf1=buf) все прошло никакого...

Баг или фича ? =)
Thread threads = new Thread; for (int i = 0; i < threads.Length; i++) { threads = new...

Таймеры - баг или фича?
В общем, пробую код,как тут http://iosystm32.ru/for-bikymmirs/27-basic-timers Единственное, немного изменяю - перед запуском таймера...

Вирус,баг или фича?
Являюсь счастливым обладателем пиратской Win7 ult 64bit(+активатор). На создание этой темы(и регистрацию на форуме вообще) побудило...

Фича или баг? (в запросе)
Есть документ с реквизитом в табличной часть "Товар" В цикле по строкам запрос В запросе |Товар = Регистр.Паллеты.Товар; ... ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru