Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448

Не считываются данные с БД

20.06.2014, 02:51. Показов 1889. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть БД "DataBase",в которой есть таблица "Actors" (Id(smallint ключ),Name(nchar),Login(nchar),Password( nchar),Speciality(nchar (Или "Тестер" или "Разработчик")).Добавил эту БД в программу (создал dataBaseDataSet1).
Пользователь вводит логин в textBox1 и пароль в textBox2 и нажимает на button1.
Хочу вывести данные учётной записи в сообщении.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
public int id;
        public string Speciality;//это я создал для передачи данных между формами
        public string Name_;//и это
        int i=0;//создал для проверки "считывает ли программа данные с БД"
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (Avtorization() == true) MessageBox.Show(id + "\n" + Name_ + "\n" + Speciality);
            else MessageBox.Show("ERROR\nCount="+i);
        }
 
 bool Avtorization()
        {
 DataTable Actor = dataBaseDataSet1.Actors;
            bool b = false;
            foreach (DataRow row in Actor.Rows)
                if (row["Login"] == textBox1 && row["Password"] == textBox2) //сравниваются логин и пароль
                { id = Convert.ToInt32(row["Id"]); //присваивается ключ
                    Speciality = Convert.ToString(row["Speciality"]);//присваивается специальность
                    Name_ = Convert.ToString(row["Name"]);//присв. имя
                    b = true; i++;//инкремент счётчика
                    break;
                }
                else b = false;
            return b;        
    }
    }
}
В итоге всегда выбивает "ERROR\nCount=0"
В чём моя ошибка?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.06.2014, 02:51
Ответы с готовыми решениями:

Долго считываются данные из БД
Почему данные долго открывается

Не считываются данные с формы
function sendCallBackData(){ var name = document.getElementById('name').value; var phone =...

Неправильно считываются данные
readln(n,m); for i:=1 to n do begin for j:=1 to m do begin read(input); mp.marked:=False; if...

10
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.06.2014, 05:59
Цитата Сообщение от triadec_96 Посмотреть сообщение
В чём моя ошибка?
В лени. Вы ленитесь разобраться в особенностях языка.

row["Login"] - это ссылка на объект, который содержит значение поля Login.

textBox1 - это ссылка на объект TextBox1. Имеется, конечно, неявное преобразование типа TextBox к типу string. То есть, в большинстве случаев TextBox1 == "AnyString" будет эквивалентно записи TextBox1.Text == "AnyString", но не всегда. Лучше, все таки, явно указывать свойство Text у TextBox'а при сравнении.

Как результат, вы сравниваете не две строки, а две ссылки на абсолютно разные объекты. Чтобы добиться корректного сравнения вам нужно писать так: row["Login"].ToString() == textBox1.Text.
1
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
20.06.2014, 14:52  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
В лени. Вы ленитесь разобраться в особенностях языка.
row["Login"] - это ссылка на объект, который содержит значение поля Login.
textBox1 - это ссылка на объект TextBox1. Имеется, конечно, неявное преобразование типа TextBox к типу string. То есть, в большинстве случаев TextBox1 == "AnyString" будет эквивалентно записи TextBox1.Text == "AnyString", но не всегда. Лучше, все таки, явно указывать свойство Text у TextBox'а при сравнении.
Как результат, вы сравниваете не две строки, а две ссылки на абсолютно разные объекты. Чтобы добиться корректного сравнения вам нужно писать так: row["Login"].ToString() == textBox1.Text.
Переделал 40-ю строку на
C#
1
if (row["Login"].ToString() == textBox1.Text && row["Password"].ToString() == textBox2.Text)
,но всё-равно не помогло.Я догадывался,что не поможет,ведь даже когда я обращался к ссылкам на объекты,а не к их строковым значениям,i было равным 0 (то есть не происходил "пересчёт" строк в БД).Мне кажется ,что моя ошибка именно в этом я без понятия как её решить.А за совет,что я обращался к ссылкам,а не к значениям объектов, спасибо.
Но увы код всё-равно не рабочий.
(41-43 строки у меня правильный,или в скобках нужно писать ""row[].ToString()"?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.06.2014, 16:44
triadec_96, если i = 0, значит таблица Actors пустая. В приведенном вами коде ее заполнения нет, поэтому либо ее заполнение либо отсутствует, либо где то есть, но работает не правильно. Как вариант ваш?
0
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
20.06.2014, 17:45  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
если i = 0, значит таблица Actors пустая. В приведенном вами коде ее заполнения нет, поэтому либо ее заполнение либо отсутствует, либо где то есть, но работает не правильно. Как вариант ваш?
таблица Actors заполнена.Там 6 строк.Ни одной записи null
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.06.2014, 18:55
triadec_96, я говорю не про базу данных, а про объект dataBaseDataSet1.Actors. Если бы в нем было 6 записей, то цикл бы выполнился 6 раз, а не 0. Покажите код, где вы эту таблицу (объект в приложении, а не таблица в БД) заполняете.
0
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
20.06.2014, 19:07  [ТС]
Вот в 123 сроке идёт инициализация датасета (код-конструктор формы)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
namespace WindowsFormsApplication3
{
    partial class Form1
    {
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        /// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Код, автоматически созданный конструктором форм Windows
 
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.button1 = new System.Windows.Forms.Button();
            this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
            this.dataBaseDataSet1 = new WindowsFormsApplication3.DataBaseDataSet1();
            ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.dataBaseDataSet1)).BeginInit();
            this.SuspendLayout();
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(45, 41);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(186, 20);
            this.textBox1.TabIndex = 0;
            // 
            // textBox2
            // 
            this.textBox2.Location = new System.Drawing.Point(45, 107);
            this.textBox2.Name = "textBox2";
            this.textBox2.Size = new System.Drawing.Size(186, 20);
            this.textBox2.TabIndex = 1;
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(42, 25);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(36, 13);
            this.label1.TabIndex = 2;
            this.label1.Text = "Login:";
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(42, 91);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(56, 13);
            this.label2.TabIndex = 3;
            this.label2.Text = "Password:";
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(95, 161);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 4;
            this.button1.Text = "OK";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // bindingSource1
            // 
            this.bindingSource1.DataSource = this.dataBaseDataSet1;
            this.bindingSource1.Position = 0;
            // 
            // dataBaseDataSet1
            // 
            this.dataBaseDataSet1.DataSetName = "DataBaseDataSet1";
            this.dataBaseDataSet1.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 202);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.textBox2);
            this.Controls.Add(this.textBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.dataBaseDataSet1)).EndInit();
            this.ResumeLayout(false);
            this.PerformLayout();
 
        }
 
        #endregion
 
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.BindingSource bindingSource1;
        private DataBaseDataSet1 dataBaseDataSet1;
    }
}
Ещё в обозревателе решений есть два конструктора "DatabaseDataSet1.Designer.cs".
Или этого мало и надо как-т ов коде инициализировать датасет.
Или сформулирую вопрос по-другому: есть заполненая БД.Как считывать поля с этой БД и сравнивать с объектами и полями формы?
Через SqlConnect не предлагать.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.06.2014, 19:43
triadec_96, в 123 строке создается пустой DataSet. Конечно, этого мало. У вас источник данных создан через мастера, поэтому если вы мышкой перетащите из источника данных таблицу на форму, то студия сама сгенерирует код на заполнение и сохранение набора данных. Сейчас у вас на форме (судя по коду дизайнера) нет компонентов, которые отвечают за связь приложения с БД.
1
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
23.06.2014, 02:04  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
triadec_96, в 123 строке создается пустой DataSet. Конечно, этого мало. У вас источник данных создан через мастера, поэтому если вы мышкой перетащите из источника данных таблицу на форму, то студия сама сгенерирует код на заполнение и сохранение набора данных. Сейчас у вас на форме (судя по коду дизайнера) нет компонентов, которые отвечают за связь приложения с БД.
Спасибо огромное!
А я то мучался ...

Добавлено через 1 час 0 минут
Цитата Сообщение от kodv Посмотреть сообщение
. У вас источник данных создан через мастера, поэтому если вы мышкой перетащите из источника данных таблицу на форму
В источнике данных не наблюдаю таблиц.Там все источники - стандартные.
С обозревателя серверов не могу перетащить.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
23.06.2014, 04:20
Вы делали так?
Миниатюры
Не считываются данные с БД   Не считываются данные с БД  
0
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
23.06.2014, 04:42  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
Конечно, этого мало. У вас источник данных создан через мастера, поэтому если вы мышкой перетащите из источника данных таблицу на форму, то студия сама сгенерирует код на заполнение и сохранение набора данных. Сейчас у вас на форме (судя по коду дизайнера) нет компонентов, которые отвечают за связь приложения с БД.
Не в то окно смотрел(
Добавил таблицу в форму - в коде появилось
C#
1
2
3
4
5
6
 private void Form1_Load_1(object sender, EventArgs e)
        {
            // TODO: данная строка кода позволяет загрузить данные в таблицу "dataBaseDataSet.Actors". При необходимости она может быть перемещена или удалена.
            this.actorsTableAdapter.Fill(this.dataBaseDataSet.Actors);
 
        }
Но всё-равно когда ввожу логин и пароль (ввожу верные) - выбивает "ERROR\nCount=0"
что на этот раз не так?

Добавлено через 2 минуты
Цитата Сообщение от kodv Посмотреть сообщение
Вы делали так?
Просто когда нажимал на источник данных в "Вид" - сворачивало обозреватель серверов и я смотрел на панель эллементов,а оказывается источник данных закрывал свойства.

Добавлено через 12 минут
Получается такой код
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.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public int id;
        public string Speciality;
        public string Name_;
        int i = 0;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (Avtorization() == true) MessageBox.Show(id + "\n" + Name_ + "\n" + Speciality);
            else MessageBox.Show("ERROR\nCount=" + i);
        }
 
        bool Avtorization()
     {
          
            bool b = false;
            foreach (DataRow row in dataBaseDataSet.Actors.Rows)
                if (row["Login"] == textBox1 && row["Password"] == textBox2)
                {
                    id = Convert.ToInt32(row["Id"]);
                    Speciality = Convert.ToString(row["Speciality"]);
                    Name_ = Convert.ToString(row["Name"]);
                    b = true; i++;
                    break;
                }
                else b = false;
            return b;
        }
 
        private void Form1_Load_1(object sender, EventArgs e)
        {
            // TODO: данная строка кода позволяет загрузить данные в таблицу "dataBaseDataSet.Actors". При необходимости она может быть перемещена или удалена.
            this.actorsTableAdapter.Fill(this.dataBaseDataSet.Actors);
 
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.06.2014, 04:42
Помогаю со студенческими работами здесь

Почему на считываются данные ?
Почему не считываються данные ? Парни помогите!!! Вроде все правильно, но он показывает как будто бы переменная пустая ... ...

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

Какой командой считываются данные ?
Какой командой считываются данные из элементов HTML в ява скрипт... Например... Допустим я хочу умножить цифры которые вводит пользователь,...

данные из файла считываются некорректно
Добрый день! Помогите понять, почему происходит следующая ситуация: В файле: 1 2 3 4.567 1 3 4 5 1 1 1 1 1 2 3 7 12 3 4 5 ...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru