Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
1

Как работают запросы

22.11.2016, 13:21. Показов 1087. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Объясните пожалуйста как оно работает?
почему при добавлении не удаляет, а добавляет?
где идет передача нужного события?

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace WFA
{
    public partial class Form1 : Form
    {
        private BindingSource source = new BindingSource();
        private DataSet dataSet = new DataSet();
        private string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=peoples.accdb;";
        
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Подключение_К_Базе_Данных()
        {
            OleDbConnection connection = new OleDbConnection(connectionString);
            connection.Open();
            OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM Peoples", connection);
            dataSet = new DataSet();
            adapter.Fill(dataSet);
            connection.Close();
            source.DataSource = dataSet.Tables[0];
            dataGridView.DataSource = source;
            dataGridView.Columns[0].Visible = false;
        }
 
        private void Сохранить_Изменения()
        {
            // Подключение --------------------------------------------------------------------->>>
 
            OleDbConnection connection = new OleDbConnection(connectionString);
            connection.Open();
            OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM Peoples", connection);
            connection.Close();
            dataGridView.Columns[0].Visible = false;
 
            // <<<---------------------------------------------------------------------
 
            // Обновление --------------------------------------------------------------------->>>
 
            adapter.UpdateCommand = new OleDbCommand("UPDATE Peoples SET Фамилия = ?, Имя = ? WHERE key = ?");
            adapter.UpdateCommand.Parameters.Add("Фамилия", OleDbType.VarChar, 25, "Фамилия");
            adapter.UpdateCommand.Parameters.Add("Имя", OleDbType.VarChar, 12, "Имя");
            adapter.UpdateCommand.Parameters.Add("key", OleDbType.Integer, 10, "key");
            adapter.UpdateCommand.Connection = connection;
 
            // <<<---------------------------------------------------------------------
 
            // Добавление --------------------------------------------------------------------->>>
 
            adapter.InsertCommand = new OleDbCommand("INSERT INTO Peoples (Фамилия, Имя) VALUES (?, ?)");
            adapter.InsertCommand.Parameters.Add("Фамилия", OleDbType.VarChar, 25, "Фамилия");
            adapter.InsertCommand.Parameters.Add("Имя", OleDbType.VarChar, 12, "Имя");
            adapter.InsertCommand.Connection = connection;
 
            // <<<---------------------------------------------------------------------
 
            // Удаление --------------------------------------------------------------------->>>
 
            adapter.DeleteCommand = new OleDbCommand("DELETE * FROM Peoples WHERE key = ?");
            adapter.DeleteCommand.Parameters.Add("key", OleDbType.Integer, 10, "key");
            adapter.DeleteCommand.Connection = connection;
 
            // <<<---------------------------------------------------------------------
 
            adapter.Update(dataSet.Tables[0]);
            Подключение_К_Базе_Данных();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Подключение_К_Базе_Данных();
        }
 
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Сохранить_Изменения();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (dataGridView.CurrentRow != null)
            {
                dataGridView.Rows.Remove(dataGridView.CurrentRow);
                Сохранить_Изменения();
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            DataRow row = dataSet.Tables[0].NewRow();
            dataSet.Tables[0].Rows.Add(row);
            Сохранить_Изменения();
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2016, 13:21
Ответы с готовыми решениями:

Не корректно работают запросы
Помогите найти ошибки , господа :) имеется SQL код select monster.name_monster as Name, ...

Не работают SQL-запросы к LocalDB
Создал LocalDB, добавил туда таблицу, определение таблицы ниже. CREATE TABLE . ( INT NOT...

Не работают запросы к БД: Отсутствуют данные для строки или столбца
всем привет. подскажите в чем беда. не работают запросы . при запуске выдается ошибка : Отсутствуют...

Как работают приведенные запросы
Нужна ваша помощь как знающих людей . Растолкуйте(разжуйте) пожалуйста языком обычных людей код...

25
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
22.11.2016, 15:00 2
SQL, Карл, SQL!
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
22.11.2016, 16:37  [ТС] 3
Цитата Сообщение от pincet Посмотреть сообщение
SQL, Карл, SQL!
Это понятно, что учить надо. SQL немного знаю.
Мне не понятно почему при добавлении запись не удаляется???
Ведь если отладчик перебирает все строки в том числе у удаление, а удаление не происходит.
Может кто объяснит что происходит?
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
22.11.2016, 16:46 4
как только придет понимание, что годнее всего работать с прямыми запросами к БД - 50% вопросов отпадут
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
22.11.2016, 16:55 5
Цитата Сообщение от glyk5 Посмотреть сообщение
Может кто объяснит что происходит?
Вы удаляете из базы строку с ключем 10.
Такая строка имеется в базе на момент обновления?
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
23.11.2016, 08:52  [ТС] 6
Цитата Сообщение от kolorotur Посмотреть сообщение
Вы удаляете из базы строку с ключем 10.
Извините может я недопонимаю, но где вы нашли ключ 10?

Добавлено через 43 минуты
Цитата Сообщение от pincet Посмотреть сообщение
как только придет понимание, что годнее всего работать с прямыми запросами к БД - 50% вопросов отпадут
В данном случае это не прямой запрос?
Тогда я вообще ни чего не понимаю.
PS. Я новичок в C# (перехожу с Delphi), там довольно просто было, кинул пару компонентов, подключил БД и меняй запрос на нужный. Здесь же я должен каждый раз подключатся к БД, изменять запрос и отключаться при этом каждый раз создавая/уничтожая переменные. Это какое-то загромождение и много кратное увеличение кода получается.
PS2. Может, если не трудно, дадите какой нибудь пример для работы с БД(Access), чтоб разобраться в тонкостях. В учебниках все склеено т.е. на кнопки добавить и подключение, и создание переменных, и запрос, и отключение.
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
23.11.2016, 08:53 7
Цитата Сообщение от glyk5 Посмотреть сообщение
Извините может я недопонимаю, но где вы нашли ключ 10?
именно по-этому и нужно писать запросы руками, а не просить это сделать студию
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
23.11.2016, 09:06  [ТС] 8
Я не прошу студию этого делать.
Я прошу помочь разобраться как правильно структурировать и составлять запросы, чтоб не писать "говнокод" и в дальнейшем не переучиваться.
0
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
23.11.2016, 10:04 9
Цитата Сообщение от glyk5 Посмотреть сообщение
Извините может я недопонимаю, но где вы нашли ключ 10?
В 70-й строке.
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
23.11.2016, 10:41  [ТС] 10
Цитата Сообщение от Usaga Посмотреть сообщение
В 70-й строке.
А я думал это размер
из справки msdn:
Кликните здесь для просмотра всего текста
Add(String, OleDbType, Int32, String)

Добавляет OleDbParameter для OleDbParameterCollection получает имя параметра, тип данных, длина столбца и имя исходного столбца.

Add
0
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
23.11.2016, 10:54 11
glyk5, да, ты прав.
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
23.11.2016, 12:00 12
Цитата Сообщение от glyk5 Посмотреть сообщение
А я думал это размер
Да, действительно, это размер.
Тогда возникает естественный вопрос: чему равно значение key, по которому производится удаление?
В запросе у вас написано:
SQL
1
DELETE * FROM Peoples WHERE KEY = ?
В какой строке кода происходит замена "?" на значение ключа?
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
23.11.2016, 12:06 13
это неименованные параметры. Значения будут извлекаться из коллекции параметров по номеру в коллекции
ТС нигде не присваивает значения параметров (по крайней мере, в приведенном коде)
да и в целом - на лице работа студии, а не кодера
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
23.11.2016, 13:35  [ТС] 14
Я и не претендую на авторство кода,код взят с этого же сайта.
Я хочу понять как это работает? и научиться работать из C# с БД, но походу мне не хотят помогать.
0
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
23.11.2016, 13:36 15
glyk5, что имеется в виду под "как это работает"? Что именно?
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
23.11.2016, 14:01  [ТС] 16
Непонятно как он определяет, что при добавлении нужно добавлять, а при удалении удалять, ведь явно я ни где не указываю что делать
0
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
23.11.2016, 14:05 17
glyk5, конечно указываешь:

C#
1
dataGridView.Rows.Remove()
Чем не призыв к действию?
0
784 / 615 / 273
Регистрация: 04.08.2015
Сообщений: 1,707
23.11.2016, 14:11 18
Цитата Сообщение от glyk5 Посмотреть сообщение
Непонятно как он определяет, что при добавлении нужно добавлять
Есть DataTable, в нем DataRow. У них есть RowState. DataAdapter проверяет это состояние и для новых записей применяет InsertCommand, для измененных UpdateCommand, удаленных - DeleteCommand. Все Command должны создаваться 1 раз, а не так, как у вас в коде.
1
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
23.11.2016, 14:49 19
никому ничего не хочу навязывать - подходец такой мягко говоря, попахивает. Сразу нужно учиться делать правильно
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
23.11.2016, 15:05  [ТС] 20
Цитата Сообщение от pincet Посмотреть сообщение
никому ничего не хочу навязывать - подходец такой мягко говоря, попахивает. Сразу нужно учиться делать правильно
Так об этом я вас и прошу, подсказать мне как правильно писать.
Я так понял, процедуру "Сохранить_Изменения()" нужно разбить на 3 процедуры, чтоб каждая выполняла свое действие правильно? Если да, то тогда в каждой процедуре будут повторяющиеся строки минимум 5 шт
0
23.11.2016, 15:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2016, 15:05
Помогаю со студенческими работами здесь

Не работают запросы
В первый раз делаю приложение $token = '66323197*****a9d46'; $fields = array(...

Не работают медиа-запросы
Доброго времени суток, уважаемые. Во время адаптивной верстки через медиа-запросы столкнулся с...

Не работают sql запросы
База данных «БАНК». Даны отношения, моделирующие работу банка и его филиалов. Клиент может...

Не работают медиа-запросы
Код HTML: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Новый препарат &lt;/title&gt; &lt;link...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru