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

Не получается обновить данные в БД SQL Server при изменении данных в dataGridView

21.05.2012, 23:43. Показов 5141. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ADO.NET C#

Добавлено через 2 минуты
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.Sql;
 
namespace SQL_Server_Programm
{
    public partial class Form1 : Form
    {
        Form2 f2 = new Form2();
        string table;
        string database;
        SqlDataAdapter dataAdapter;
        DataTable dt = new DataTable();
        //DataSet change;
        //SqlCommandBuilder builder;
        DataSet ds ;
 
        public Form1()
        {
            InitializeComponent(); 
        }
 
        private void connectToolStripMenuItem_Click(object sender, EventArgs e)
        {
            f2.ShowDialog();
            if (f2.Flag == true)
            {
                dataGridView1.Columns.Clear();
                button1.Enabled = true;
                treeView1.Enabled = true;
                Tree_Fill();
            }
        }
 
        private void Tree_Fill()
        {
            string query = "SELECT * FROM sys.databases; ";
            int i = 0;
           
            using (SqlConnection connection = new SqlConnection(f2.Connection))
            {
                treeView1.Nodes.Clear();
                TreeNode node = new TreeNode("DataBases");
                treeView1.ImageIndex = 0;
                treeView1.SelectedImageIndex = 0;
                treeView1.Nodes.Add(node);
                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter(query, connection);
 
                //try
                //{
                    da.Fill(dt);
                //}
                //catch
                //{
                //    button1.Enabled = false;
                //    treeView1.Nodes.Clear();
                //}
 
                foreach (DataRow row in dt.Rows)
                {
                    treeView1.Nodes[0].Nodes.Add(new TreeNode { Text = row[0].ToString(), ImageIndex = 1, SelectedImageIndex = 1 });
                    DataTable dt1 = new DataTable();
                    string query1 = "Use " + row[0].ToString() + " SELECT Name FROM dbo.sysobjects WHERE (xtype = 'U'); ";
                    SqlDataAdapter da1 = new SqlDataAdapter(query1, connection);
                    da1.Fill(dt1);
                    foreach (DataRow row1 in dt1.Rows)
                        treeView1.Nodes[0].Nodes[i].Nodes.Add(new TreeNode { Text = row1[0].ToString(), ImageIndex = 2, SelectedImageIndex = 2 });
                    i++;
                }        
            }
        }
 
        private void treeView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            TreeNode tn = treeView1.SelectedNode;
            string query = "USE " + tn.Parent.Text.ToString() + " SELECT * FROM " + treeView1.SelectedNode.Text.ToString();
            //ds = new DataSet();
            SqlConnection connection = new SqlConnection(f2.Connection);
            dataAdapter = new SqlDataAdapter(query, connection);
            ds = new DataSet();
            BindingSource bs1 = new BindingSource();
            database = tn.Parent.Text.ToString();
            table = treeView1.SelectedNode.Text.ToString();
            connection.Open();
            dataAdapter.Fill(ds);
            dt = ds.Tables[0];
            bs1.DataSource = ds.Tables[0];
            dataGridView1.DataSource = ds.Tables[0];
            bindingNavigator1.BindingSource = bs1;
            connection.Close();
        }
  
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                using (SqlConnection connection = new SqlConnection(f2.Connection))
                {
                    DataTable dt = new DataTable();
                    SqlDataAdapter dataAdapter = new SqlDataAdapter(richTextBox1.Text, connection);
                    dataAdapter.Fill(dt);
                    dataGridView1.DataSource = dt.DefaultView;
                }
                MessageBox.Show(this, "OK",
                        "Connection Info", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch
            {
                MessageBox.Show(this, "Incorrect input",
                        "Connection Info", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
 
        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void refreshToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (treeView1.Enabled == true)
                Tree_Fill();
        }
 
        private void disconnectToolStripMenuItem_Click(object sender, EventArgs e)
        {
            treeView1.Nodes.Clear();
            treeView1.Enabled = false;
            button1.Enabled = false;
            dataGridView1.Columns.Clear();
        }
 
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            //textBox1.Text = dt.Columns[0].GetType().ToString();
            
        }
 
        private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
        {
            
        }
 
        private void dataGridView1_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
        {
               
        }
 
    }
}
Помогите пожалуйста разобраться с обновлением данных в этом коде
файлы Visual Studio 2010
Вложения
Тип файла: rar SQL Server Programm.rar (81.7 Кб, 14 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2012, 23:43
Ответы с готовыми решениями:

Как обновить данные в DataGridView при изменении записей в БД
Есть форма F1 с пустым датагридом. Я делаю двойной щелчок по ячейке и появляется форма F2 с набором записей. Я делаю двойной щелчок по...

Как обновить данные в одной подчиненной форме при изменении данных в другой
Вроде ничего сложного, но не получается... Ситуация такая: есть таблица с обработанным написаниями клиентов Таб1 и таблица с...

Как правильно обновить данные для списка при изменении данных в другом фрагменте?
Здравствуйте. Подскажите как правильно обновить данные для адаптера списка в главном фрагменте при изменении списка в дочернем фрагменте....

32
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 48
22.05.2012, 01:39  [ТС]
Студворк — интернет-сервис помощи студентам
всё решил задачу, СПАСИБО ОГРОМНОЕ, походу дела, все ошибки из-за connection.Close();
а обновление сделал таким:
C#
1
2
3
            SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter);
            dataAdapter.UpdateCommand = builder.GetUpdateCommand();
            dataAdapter.Update(ds.Tables[0]);
0
to
19 / 19 / 2
Регистрация: 28.10.2010
Сообщений: 296
22.05.2012, 01:41
Цитата Сообщение от Alex_91 Посмотреть сообщение
dataAdapter.Update(ds.Tables[0]);
А вместо 0 можете спокойно в кавычках писать имя таблицы
C#
1
dataAdapter.Update(ds.Tables["my_table"]);
0
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 48
22.05.2012, 01:48  [ТС]
у меня в программе получается, что можно изменять данные только в одной таблице,
а должна изменять таблицу по выбору пользователя (
0
to
19 / 19 / 2
Регистрация: 28.10.2010
Сообщений: 296
22.05.2012, 01:53
Ну так поставьте на форму comboBox который будет хранить имена всех таблиц БД (можно сделать его заполнение автоматическим). И пусть пользователь сам выбератет какую таблицу ему редактировать. В зависимости от его выбора будет подставляться значение сюда
C#
1
dataAdapter.Update(ds.Tables[comboBox1.Items[comboBox1.SelectedIndex])]);
как то так)
0
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 48
22.05.2012, 01:56  [ТС]
ошибся))), всё норм

Добавлено через 1 минуту
SqlCommandBuilder работает только с таблицами, где задан ключ))
0
to
19 / 19 / 2
Регистрация: 28.10.2010
Сообщений: 296
22.05.2012, 01:58
Вообще-то делать редактирование через DataGridView нельзя!!!!!!
Его можно использовать только для вывода данных. Все данные должны вводиться в БД только через едиты и т.д.
DataGridView это источник кучи ошибок)
0
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 48
22.05.2012, 02:02  [ТС]
спасибо за совет)
0
to
19 / 19 / 2
Регистрация: 28.10.2010
Сообщений: 296
22.05.2012, 02:03
не за что)
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.05.2012, 09:44
Цитата Сообщение от to Посмотреть сообщение
Вообще-то делать редактирование через DataGridView нельзя!!!!!!
to, кто тебе такое сказал? Можно всё, что не запрещено, а DataGridView имеет спец. функционал именно для редактирования, это заложено разработчиком. Использовать его для редактирования данных можно и нужно, но в разумных пределах.
0
to
19 / 19 / 2
Регистрация: 28.10.2010
Сообщений: 296
22.05.2012, 10:58
nio, По тому что так никто не делает! DataGridView потенциальный источник ошибок. Допустим у вас многопользовательское приложение и запущено несколько клиентских приложений на разных машинах. В момент когда один пользователь изменил некоторые данные в таблице, а все остальные пользователи работают еще со старыми данными, вот тут и возникает куча ошибок.
Я не говорю то dataGridView плохой компонент и в нем ошибки, просто рекомендуют да бы не было ошибок и не возникало ошибочных данных использовать его только для просмотра ну никак не для изменения таблиц!
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.05.2012, 11:15
Цитата Сообщение от to Посмотреть сообщение
В момент когда один пользователь изменил некоторые данные в таблице, а все остальные пользователи работают еще со старыми данными, вот тут и возникает куча ошибок.
в данном случае проблема не в этом, а в построении запроса, форма с контролами равнозначно подвержена этой же проблеме. Есть такое понятие "обеспечение целостности данных", которое включает в себя и способы избежания данного рода проблем. Замечу, что решение данной проблемы не требует больших усилий от программиста.
Цитата Сообщение от to Посмотреть сообщение
да бы не было ошибок и не возникало ошибочных данных использовать его только для просмотра ну никак не для изменения таблиц
Нет. Не согласен. Пример: таблица-справочник с одним значимым полем (ну или двумя). Заполнение и редактирование такого справочника лучше делать именно в таблице, а не на отдельной форме с контролами. И, как показывает практика, источником всех проблем являются "чудо-прогеры", которые не в состоянии обеспечить стабильную работу приложения.
0
to
19 / 19 / 2
Регистрация: 28.10.2010
Сообщений: 296
22.05.2012, 11:18
Возможно и так) Но меня учили как я написал выше)
Скорее всего все зависит от сложности программы и от того будет ил она многопользовательской.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.05.2012, 11:23
Цитата Сообщение от to Посмотреть сообщение
Скорее всего все зависит от сложности программы и от того будет ил она многопользовательской.
Никак не зависит. Всё зависит от юзабильности. На первом месте удобство использования (независимо от числа пользователей), всё остальное проблемы программиста. Золотое правило "покупатель всегда прав", а покупатель выберет ту прогу, с которой ему удобнее работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2012, 11:23

Linq to SQL: не получается обновить данные
Не получается сделать update Офф Источник // Query the database for the row to be updated. var query = from ord in...

Как обновить данные в dataGridView из БД Sql
Доброго времени суток. Подскажите пожалуйста, не могу разобраться! Есть dataGridView, есть таблица SQL, если в БД Таблицу вносят новую...

Уведомление о изменении данных с помощью SqlDependency (sql server 2008 R2)
Мне необходимо обновлять данные на форме у клиентов если изменяются данные в таблице. Проблема в том, что уведомление срабатывает только...

На загружает данные из таблицы MS SQL Server в DataGridView
Из приложения пытаюсь загрузить данные в таблицу DataGridView из базы данных SQL Server 2014. Собственно все работает, но только на...

Нужен ли перезапуск Sql Server при изменении прав на объект?
Добрый день! Пытаясь разобраться, почему же у некоторых клиентов не запускается хранимая процедура, я обнаружил, что на неё не стоит...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
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) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru