Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Pal4
1 / 1 / 0
Регистрация: 23.07.2013
Сообщений: 15
1

Не обновляются данные в бд

30.09.2013, 11:36. Просмотров 819. Ответов 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
public void UpdateUser(User user)
        {
            OleDbCommand cmd = new OleDbCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = this._cn;
 
            if (user.UID == 0)
            {
                cmd.CommandText = "insert_user";
            }
            else
            {
                cmd.Parameters.Add("@user_id", OleDbType.Integer).Value = user.UID;
                cmd.CommandText = "update_user";
            }
 
            cmd.Parameters.Add("@group_id", OleDbType.Integer).Value = user.GroupId;
            cmd.Parameters.Add("@name", OleDbType.VarWChar).Value = user.Name;
            cmd.Parameters.Add("@surname", OleDbType.VarWChar).Value = user.Surname;
            cmd.Parameters.Add("@patronymic", OleDbType.VarWChar).Value = user.Patronymic;
            cmd.Parameters.Add("@birthday", OleDbType.DBDate).Value = user.BirthDay;
            cmd.Parameters.Add("@driving_school", OleDbType.VarWChar).Value = user.DrivingSchool;
 
            cmd.Parameters.Add("@driver", OleDbType.VarWChar).Value = user.DriverName;
            cmd.Parameters.Add("@first_pay", OleDbType.Integer).Value = user.FirstPay;
            cmd.Parameters.Add("@second_pay", OleDbType.Integer).Value = user.SecondPay;
            
            if (user.LastExamDate.HasValue)
            {
                cmd.Parameters.Add("@last_exam_date", OleDbType.DBDate).Value = user.LastExamDate.Value;
            }
            else
            {
                cmd.Parameters.Add("@last_exam_date", OleDbType.DBDate).Value = DBNull.Value;
            }
 
            if (user.BeginDate.HasValue)
            {
                cmd.Parameters.Add("@begin_date", OleDbType.DBDate).Value = user.BeginDate.Value;
            }
            else
            {
                cmd.Parameters.Add("@begin_date", OleDbType.DBDate).Value = DBNull.Value;
            }
                cmd.ExecuteNonQuery();
 
}
Причём "insert_user" работает правильно. "update_user" работает без ошибок, но не изменяет бд.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2013, 11:36
Ответы с готовыми решениями:

Не обновляются/добавляются данные данные через клиент
привет форумчане,не обновляются данные через клиент при нажатии на кнопку ничего не происходит...

Не обновляются данные
К проекту прикреплена ms access. Есть две формочки. Форма1: Авторизация пользователей -...

Не обновляются данные dataGridView
Добрый день! Вообщем такая ситуация, есть dataGrideViwe и есть таблица "Menu" (access)....

Не обновляются данные в ячейке access
Привет всем! Прошу помощи у экспертов. Создаю функцию обновления значений в ячейке базы данных MS...

Mysql и DataGridView: не обновляются данные в БД
Доброго времени суток. Начну с небольшой прелюдии: есть форма, есть DataGridView, по формлоаду...

12
ksk
614 / 482 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
30.09.2013, 15:40 2
Я бы сначала на SQL это дело отладил.
И не заморачивался бы с параметризованными запросами, а просто выполнил бы запрос, сформированный с помощью string.Format(...).
Так оно имхо гораздо проще и дебагабельнее.
0
SharpDeveloper
135 / 132 / 22
Регистрация: 16.02.2012
Сообщений: 453
30.09.2013, 16:26 3
Цитата Сообщение от ksk Посмотреть сообщение
И не заморачивался бы с параметризованными запросами, а просто выполнил бы запрос, сформированный с помощью string.Format(...).
Нехороший совет.

Как видно, вы используете ХП, но без текста ХП тут трудно что-то посоветовать.
Сравните входящие параметры ХП, оттрассируйте ХП.
0
ksk
614 / 482 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
30.09.2013, 16:37 4
Цитата Сообщение от SharpDeveloper Посмотреть сообщение
Нехороший совет.
Хоть бы обосновал.
0
30.09.2013, 16:37
Pal4
1 / 1 / 0
Регистрация: 23.07.2013
Сообщений: 15
01.10.2013, 10:41  [ТС] 5
Запросы в БД выполняются все.
Из программы выполняются все, кроме обновления информации о пользователе.

Ошибок никаких нет. Всё спокойно выполняется, но бд не изменяет данные о пользователе.
0
nio
5969 / 3375 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
01.10.2013, 11:35 6

Не по теме:

Цитата Сообщение от ksk Посмотреть сообщение
Хоть бы обосновал.
Зачем писать плохо, а потом переписывать, если можно написать хорошо сразу. Двойная работа никогда не приветствуется. Ещё один аргумент: "сделаю так временно, а потом переделаю...", контраргумент: "нет ничего более постоянного, чем что-то временное", набыдлокодишь и пойдёшь дальше, а вернуться потом или забудешь, или некогда будет. Другой прогер станет разбираться, тебе же икаться будет... а оно тебе надо это икание? :)



Добавлено через 2 минуты
Pal4, покажи текст процедуры
1
VladA4
50 / 50 / 7
Регистрация: 06.05.2013
Сообщений: 79
Записей в блоге: 1
01.10.2013, 14:31 7
Цитата Сообщение от ksk Посмотреть сообщение
Я бы сначала на SQL это дело отладил.
И не заморачивался бы с параметризованными запросами, а просто выполнил бы запрос, сформированный с помощью string.Format(...).
Так оно имхо гораздо проще и дебагабельнее.
Можно использовать Linq to sql и забыть проблемы построения Sql руками, а что касается string.Format(...) то это самый ужасный совет, хотя бы из-за sql инъекций !!!!!

По поводу linq to sql, могу сказать, что это самый просто ORM, который ориентирован на разработку от базы данных, но для первого знакомства с ORM очень удобен. В дальнейшем порекомендую NHibernate + Fluent Nhibernate.

Я понимаю, что вопрос был конкретно про SqlCommand, но я не вижу каких то причин не использовать ORM, который снимите с Вас огромный груз !!!
0
ksk
614 / 482 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
01.10.2013, 19:25 8

Не по теме:

VladA4, спасибо за первый конструктивный ответ на мой коммент.

Я понимаю, что с ОРМами жить гораздо легче, и, как высказался автор знаменитой программы LINQPad, "скоро LINQ2SQL" совсем вытеснит SQL.

Я уважаю право людей писать на ОРМах, и даже на бейсике. Но я не считаю полезными попытки использовать БД, спрятавшись от неё за ОРМом, не желая знать, что происходит на стороне БД.

Вот на одном знакомом мне производстве некоторые люди тоже очень любят всякие ОРМы.
Потом по итогам нагрузочного тестирования все всё бросают и начинают выкашивать ОРМы и линкузаклинания, потому что ормы ни разу не держат нагрузку, а linq запросы её просто кладут.

Так что в моей практике ОРМы скорее надевают огромный груз, нежели снимают его )

Вопрос на самом деле в том, делает человек курсач, чтобы "сделать и забыть", или хочет во всём разобраться и писать код, за работу которого он готов будет несколько лет отвечать.



Возвращаясь от флуда к теме поста.

В текущей ситуации неизвестно, где косяк - в процедуре, которую ТС вызывает или в том, как он её вызывает. Может быть ТС не там ищет проблему. Поэтому я и написал то, что я написал. Дебажить SQL удобнее штатными средствами SQLServer'а.
0
VladA4
50 / 50 / 7
Регистрация: 06.05.2013
Сообщений: 79
Записей в блоге: 1
01.10.2013, 22:26 9
Цитата Сообщение от ksk Посмотреть сообщение
Так что в моей практике ОРМы скорее надевают огромный груз, нежели снимают его )
Могу сказать , то что Linq to sql, как ORM конечно проблемный из-за очень сложной работы Tree expression, но скажем тот же NHibernate решает все на ура. Соглашусь , что скажем поиск, как самая нагруженная часть, может и требует чистого SQL ( мы из-за full text юзаем чаще всего ), но это можно решать так же за счет OLAP ( плоских таблиц ) и кэша , так что SQL это очень редкая панацея. Если посмотреть то большая часть задач с базой решается через ORM , наверно процентов 80%, а то и больше, опять же надо не забывать, что оптимизация делает в самом конце проекта, когда будет ясно, что оптимизировать. Не забывайте, что скорость разработки более ценная на начальных этапах, проще потом переделать на чистый SQL, но уже зная что, а не писать просто так, хотя можно в одну строку все построить. На счет LINQ запросов, то если делать все поверх IQueryable и это будет транслироваться, то с большой вероятностью это будет работать, так же как и Ваш ручной запрос, но стоимость поддержки SQL запросов , куда выше !

Цитата Сообщение от ksk Посмотреть сообщение
Вопрос на самом деле в том, делает человек курсач, чтобы "сделать и забыть", или хочет во всём разобраться и писать код, за работу которого он готов будет несколько лет отвечать.
Я отвечаю, для того, что бы поделится своим опытом и помочь человеку, думаю в первую очередь, что он хочет работать по специальности и стать профессионалом.

По задаче , конечно надо посмотреть, что там за код процедуры.


P.S. Мы в рамках компании используем CQRS framework ( incoding framework ), который имеет все необходимое для работы с базой ( CRUD - create,update,read,delete ), что очень экономит время на проработку архитектуры и инфраструктуры проекта.
0
nio
02.10.2013, 10:15
  #10
 Комментарий модератора 
прекращаем оффтоп и холивар
0
Pal4
1 / 1 / 0
Регистрация: 23.07.2013
Сообщений: 15
03.10.2013, 19:01  [ТС] 11
Попытаюсь разъяснить. Проект этот достался мне и моему товарищу в инсте на военке( программа для сдачи тестов, небольшой клиент-серверный проект(на 1 комп.класс). Сразу прошу не начинать обсуждать, что же творится на военной кафедре и всё такое..). Базу подключают Access. С самими запросами всё в порядке(при выполнении в MSAccess всё работает как надо). В методе который я показал, как вы поняли вызывается запрос на обновление существующего пользователя или добавление нового. Добавление работает, обновление без каких-либо ошибок выполняется но данные не изменяются.
В чём может быть загвоздка? Попробуйте натолкнуть на верный путь.
0
nio
5969 / 3375 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
04.10.2013, 09:31 12
Цитата Сообщение от Pal4 Посмотреть сообщение
Попробуйте натолкнуть на верный путь.
тебе уже говорили - покажи текст процедуры
1
Pal4
1 / 1 / 0
Регистрация: 23.07.2013
Сообщений: 15
07.10.2013, 13:16  [ТС] 13
Запрос на обновление.
SQL
1
2
3
PARAMETERS [@group_id] Long, [@name] Text ( 255 ), [@surname] Text ( 255 ), [@patronymic] Text ( 255 ), [@birthday] DateTime, [@driving_school] Text ( 255 ), [@driver] Text ( 255 ), [@first_pay] Long, [@second_pay] Long, [@last_exam_date] DateTime, [@begin_date] DateTime;
UPDATE [USER] SET [USER].group_id = [@group_id], [USER].name = [@name], [USER].surname = [@surname], [USER].patronymic = [@patronymic], [USER].birthday = [@birthday], [USER].driving_school = [@driving_school], [USER].driver = [@driver], [USER].first_pay = [@first_pay], [USER].second_pay = [@second_pay], [USER].last_exam_date = [@last_exam_date], [USER].begin_date = [@begin_date]
WHERE (((USER.user_id)=[@user_id]));
Запрос на добавление.
SQL
1
2
3
PARAMETERS [@group_id] Long, [@name] Text ( 255 ), [@surname] Text ( 255 ), [@patronymic] Text ( 255 ), [@birthday] DateTime, [@driving_school] Text ( 255 ), [@driver] Text ( 255 ), [@first_pay] Long, [@second_pay] Long, [@last_exam_date] DateTime, [@begin_date] DateTime;
INSERT INTO [USER] ( group_id, name, surname, patronymic, birthday, driving_school, driver, first_pay, second_pay, last_exam_date, begin_date )
SELECT [@group_id] AS Выражение1, [@name] AS Выражение2, [@surname] AS Выражение3, [@patronymic] AS Выражение4, [@birthday] AS Выражение5, [@driving_school] AS Выражение6, [@driver] AS Выражение7, [@first_pay] AS Выражение8, [@second_pay] AS Выражение9, [@last_exam_date] AS Выражение10, [@begin_date] AS Выражение11;
Добавлено через 3 часа 38 минут
Всё нашёл, в параметрах запроса не было user_id.
0
07.10.2013, 13:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 13:16

Не обновляются данные в базе данных
В чем проблема? База данных подключена. При нажатии кнопки button не обновляются данные, а...

Не обновляются данные БД mysql (ошибка запроса)
Код формы, которая содержит данные из таблицы тарифы(id,name,cost,validity,description) using...

Не обновляются данные в БД при добавлении новой строки
private void mnuAddCl_Click(object sender, EventArgs e) { using (SqlConnection cn = new...


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

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

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