Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# и базы данных, ADO.NET

Войти
Регистрация
Восстановить пароль
 
Bretbas
Каждому свое
348 / 118 / 31
Регистрация: 05.08.2013
Сообщений: 1,245
Завершенные тесты: 1
#1

Обновление базы данных с textBox - C#

26.01.2016, 18:05. Просмотров 632. Ответов 8
Метки нет (Все метки)

И еще один вопросик:
Также есть база данных на Microsoft Server. В ней есть таблица, содержащая столбцы - id, info, sum
Мне нужно сделать такое - когда гружу программу, в два textBox'а загружаются данные по ключу id(WHERE id = @id), затем я могу изменить эти данные прям в textBox'ах и нажать на кнопку "Сохранить", после чего, должна обновиться строка в базе данных новыми данными.
Итак, вот моя реализация:
1. Вначале я кидаю на форму два textBox'а и выставляю параметр первого DataBindings -> Text -> reportBindingSource - info, и второго DataBindings -> Text -> reportBindingSource - sum
2. Дальше событие form_Load грузит данные с базы в textBox'ы:

C#
1
2
3
4
5
6
private void Form1_Load(object sender, EventArgs e)
{
    // Гружу данные в this.ordersDataSet.Report и соответственно они грузятся в textBox, так как я выставил DataBindings -> Text
    DataRow currentRow = this.ordersDataSet.Orders.Rows[e.RowIndex];
    this.reportTableAdapter.Fill(this.ordersDataSet.Report, Convert.ToInt32(currentRow["id"]));
}
3. Теперь событие по нажатию на кнопку "Сохранить":

C#
1
2
3
4
5
6
7
8
private void button6_Click(object sender, EventArgs e)
{
    int i = this.ordersDataSet.Report.Rows.IndexOf( newRow );
 
    this.ordersDataSet.Report.Rows[i]["info"]   = this.textBox2.Text;
    this.ordersDataSet.Report.Rows[i]["sum"]    = Convert.ToDouble(this.textBox3.Text);
    this.reportTableAdapter.Update(this.ordersDataSet.Report);
}
Должно по идее все работать, но почему-то данные с textBox'ов не грузятся в базу. Методом тыка понял что это из за DataBindings -> Text.
Помогите, как решить эту проблему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2016, 18:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обновление базы данных с textBox (C#):

Обновление данных из базы данных в клиентах в реальном времени - C#
Здравствуйте, уважаемые коллеги! Как сделать то, что описано в теме? Расскажу с самого начала откуда пошла такая задача. Есть в...

Обновление базы данных - C#
В базе данных две таблицы (оформление и работа). Создаю table("Выполненные работы"), который я заполняю при помощи соединяющего запроса...

Обновление базы данных - C#
Здравствуйте! Есть база данных mssql которая содержит информацию об ВУЗах (название вуза и информация об его...

Обновление базы данных - C#
Имею приложение к которому подключена база, в обозревателе решения в проекте висит файл dataset.xsd. Добавил несколько таблиц через мс...

Базы данных. Сортировка и обновление - C#
Здравствуйте. Пишу дипломную работу с использованием баз данных. У меня такой вопрос: Как программно обновить содержимое DataGridView...

Обновление существующей базы данных - C#
Пытаюсь обносить базу данных, включил миграции(Enable-Migrations), добавил миграции (Add-migrations), пытаюсь обновить базу...

8
Usaga
Эксперт .NET
2259 / 1927 / 353
Регистрация: 21.01.2016
Сообщений: 7,401
Завершенные тесты: 2
27.01.2016, 07:45 #2
Переде тем как делать Update было бы не плохо заставить DataSet принять произведённые вами изменения:
C#
1
this.ordersDataSet.AcceptChanges();
0
kodv
1402 / 1076 / 235
Регистрация: 11.04.2011
Сообщений: 2,589
Завершенные тесты: 1
27.01.2016, 12:59 #3
Цитата Сообщение от Usaga Посмотреть сообщение
Переде тем как делать Update было бы не плохо заставить DataSet принять произведённые вами изменения:
this.ordersDataSet.AcceptChanges();
Где вас таких берут? Почему вы все стремитесь выполнить AcceptChanges? В MSDN же черным по белому написано, что, во-первых:
Вызов метода AcceptChanges или метода AcceptChanges приведет к фиксации всех изменений в DataSet или DataTable.Если любой из этих методов вызывается до вызова метода Update, изменения не будут фиксироваться при вызове метода Update, пока не будут внесены дополнительные изменения после вызова метода AcceptChanges или метода AcceptChanges.
То есть, если воспользоваться вашим вредным советом, то на базе точно ни чего не обновится.
Во-вторых:
Обычно для объекта DataTable метод AcceptChanges вызывается после попытки обновления класса DataSet с помощью метода DbDataAdapter.Update.
Что означает, что метод Update вызывает внутри себя метод AccpetChanges, а значит не нужно вызывать метод AccetpChanges после выполнения Update, как это советует dimkadv2 в соседней теме.
Ни до Update, ни после Update вызывать метод AccpetChanges не следует. Update сам его вызовет тогда, когда это нужно!

Bretbas, Как вы узнаете, что данные не грузятся в базу? Убедитесь, что у вас в проекте не стоит флажок "Копировать файл БД всегда". Если особо не придераться к коду, в частности к целесообразности всяких IndexOf в вашем коде, то код должен работать.
1
Bretbas
Каждому свое
348 / 118 / 31
Регистрация: 05.08.2013
Сообщений: 1,245
Завершенные тесты: 1
28.01.2016, 22:38  [ТС] #4
kodv,чтобы проверить обновилась база или нет, можно несколькими способами, к примеру в sql expoler зайти в базу-нужную таблицу и открыть view data или как то так. Или просто перезагрузить программу...ничего не обновляется. Но это "не обновление" происходит только если я пишу в textBox...в остальных местах программы все данные пишутся в базу
0
Bretbas
Каждому свое
348 / 118 / 31
Регистрация: 05.08.2013
Сообщений: 1,245
Завершенные тесты: 1
05.02.2016, 20:01  [ТС] #5
Ребят, короче ничерта у меня не получается. Вот заснял видео для более подробного объяснения проблемы


Помогите пожалуйста
0
Bretbas
Каждому свое
348 / 118 / 31
Регистрация: 05.08.2013
Сообщений: 1,245
Завершенные тесты: 1
07.02.2016, 03:11  [ТС] #6
Вы по можете?) жду ваших ответов)
0
Usaga
Эксперт .NET
2259 / 1927 / 353
Регистрация: 21.01.2016
Сообщений: 7,401
Завершенные тесты: 2
07.02.2016, 07:04 #7
Как насчёт такого (более правильного на мой взгляд) варианта:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void button6_Click(object sender, EventArgs e)
{
    try {
    DataRow row = this.ordersDataSet.Report.NewRow();
 
    row["info"]   = this.textBox2.Text;
    row["sum"]    = Convert.ToDouble(this.textBox3.Text);
 
    this.ordersDataSet.Report.Rows.Add(row);
    this.reportTableAdapter.Update(this.ordersDataSet.Report);
    } catch(Exception ex) {
        MessageBox.Show("Error", ex.Message);
    }
}
При этом я бы хотел дополнительно уточнить: с чем выполняется привязка данных двух контролов (в видео вы указывали, что выполнили привязку)? Просто в пример, который я взял за основу для данного кода выполняется прямое обращение к контролам, которые к чему-то привязаны. Обычно так не делается. Если вы используете привязку данных, то и должны использовать её для получения данных из этих контролов!
0
Bretbas
Каждому свое
348 / 118 / 31
Регистрация: 05.08.2013
Сообщений: 1,245
Завершенные тесты: 1
07.02.2016, 23:22  [ТС] #8
Вы не поняли. Каждой строке из таблицы report соответствует строка из таблицы orders( как видно на видео ). В dataGridView2 отображается информация из таблицы orders. Также в этом же dataGridView2 имеется столбец с checkedBox'ами. То есть у каждой строки в dataGridView2 есть свой checkedBox соответственно.
Как я сказал выше, для каждой строки таблицы orders соответствует своя строка из таблицы reports. Таблица reports состоит из полей - id_order, info, sum. Поле info и sum привязаны к двум контроллер - textBox1 и textBox2( привязаны через DataBindings у каждого textBox'а. Это видно на видео ). Соответственно отображаться и изменяться info и sum каждой строки из reports будет через textBox'ы.
А теперь логика:
Выбираю строку из dataGridView2, где отображается таблица orders и кликаю по checkedBox этой строки. Всвязи с этим создаётся новая строка в reports, где id_order будет индекс строки из таблицы orders. Поля info и sum пока пустые. Также после выбирания checkedBox становятся доступны контролы textBox, о которых я говорил выше. Там я могу вбить информацию и нажать на кнопку сохранить. после чего, информация записывается в ту строку, которая была создана ранее в reports, в поля info и sum.
Теперь я закрывают и открываю программу заново. Нажимаю на строку в dataGridView2, которая отображает orders, на которую нажимал до закрытия программы. Так вот изменения должны сохраниться - флажок на checkedBox должен быть активным, textBox'ы должны быть доступны, и в них должна быть сохранена( то есть уже брать с базы с таблицы reports ) информация, ту которую я вбивал.

Фуууухх... вроде все...думаю понятно, что мне нужно сделать....
0
kodv
1402 / 1076 / 235
Регистрация: 11.04.2011
Сообщений: 2,589
Завершенные тесты: 1
10.02.2016, 10:19 #9
Bretbas, учитесь пользоваться дебаггером. С его помощью есть возможность посмотреть, какое значение какая переменная и в какой момент имеет.
По поводу привязки данных. по идее, привязка данных двух-сторонняя. То есть, при изменении свойства Text в TextBox автоматически изменяется info в DataTable, и наоборот. В вашем случае конечный код для сохранения изменений в БД должен выглядеть так:
C#
1
2
3
4
private void button6_Click(object sender, EventArgs e)
{
    reportTableAdapter.Update(this.ordersDataSet.Report);
}
Если он не сработает, то нужно искать ошибки при пошаговом выполнении программы в дебаггере.
В вашем случае, возможно, у .NET рвет башню из-за попытки выполнить ненужные действия. Сейчас проверять нет времени, но, возможно, внутри процедуры IndexOf происходят какие-нибудь действия, которые инициируют несанкционированные срабатывания привязки данных в результате которого в момент дальнейшего присваивания элементы управления реально содержат пустые значения. Но это из разряда предположений по принципу "пальцем в небо".
0
10.02.2016, 10:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2016, 10:19
Привет! Вот еще темы с ответами:

Из базы данных в textBox - C#
Как можно сделать так, что бы при открытии формы из id.Text берется ИД человека и нужно что бы заполнился FIO.Text по этому ИД.

Не получается пофиксить обновление базы данных - C#
Прописано сохранение базы данных в 2ой форме на кнопке сохранить, в 4ой форме есть datagreedview в котором отображаются данные БД, но при...

Обновление базы данных dataadapter.Update - C#
знаю что таких тем было много но ни на одной из них я не нашел ответа на свой вопрос подключение.... думаю тут все правильно... ...

Перенос данных из базы в Textbox - C#
Подскажите или покажите пример как сделать что б данные для обмена валют брались из подключенной базы данных и и вводились в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru