Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.02.09;
Скачать: CL | DM;

Вниз

C# и БД   Найти похожие ветки 

 
Sergey13 ©   (2013-08-27 15:45) [0]

Может поможет кто, на пальцах объяснит, куда посмотреть? Коллега по работе (шарповец) в отпуске, и у меня через два дня отпуск, но надо кровь из носу сделать одну мульку. А опыта у меня в шарпе - минимум.
Суть. Не сохраняется датасет собственно в БД.
БД примитивная, но не работал я с ними в шарпе.
Вроде стараюсь как в хелпе все делать
На кнопке
this.Validate();
this.meteringBindingSource.EndEdit();
this.meteringTableAdapter.Update(this.prolivDataSet);

т.е. через адептер таблицы даю команду применить обновления.
И нифига не сохраняет.
Такое ощущение что какую то "галку" я где то не поставил. Но какую и где?

ЗЫ: не пинайте сильно, если бы не цейтнот не обратился бы сюда с таким вопросом. 8-(


 
icelex ©   (2013-08-27 16:06) [1]

а кто здесь кто?


 
картман ©   (2013-08-27 18:01) [2]

http://msdn.microsoft.com/en-us/library/ms171933.aspx


 
Sergey13 ©   (2013-08-28 08:22) [3]

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


 
Плохиш ©   (2013-08-28 10:43) [4]


> Sergey13 ©   (28.08.13 08:22) [3]

По ссылке есть ещё вызов AcceptChanges


 
Sergey13 ©   (2013-08-28 11:02) [5]

2Плохиш
У меня он тоже есть. В приведенном варианте просто не отражен. Я его после вставки строки писал, типа Post. В сохранение тоже приписывал. Нет результата. 8-(


 
Плохиш ©   (2013-08-28 11:07) [6]

Странно. А ты точно там ищешь, где сохранял?


 
Плохиш ©   (2013-08-28 11:13) [7]

Кстати, а редактирование не в гриде случайно происходит? А то может не хватает CommitEdit для грида.


 
Sergey13 ©   (2013-08-28 12:57) [8]

Разобрался. Точнее не разобрался, но вроде заработало. Смысл (как я понял) был в том, что надо файл базы данных (в его аксесе нарисовал) включить в состав проекта через добавление существующего элемента - т.е mdb-файл должен быть виден в обозревателе решений наряду с формами и прочим. А везде (где я смотрел) описывался процесс добавления "источника данных" на существующий файл. Раз 20 создавал/пересоздавал я этот источник. И только тут
http://social.msdn.microsoft.com/Forums/ru-RU/768d067d-2ceb-46eb-9986-f86b0f0ec48d/-access
наконец прочитал про подключение файла. При этом автоматом создался и источник и все вроде как заработало (тьфу три раза).

Может и башка конечно уже не варит после копания в непонятном в условиях цейтнота, и не заметил я просто этой феньки. Но...
Целый день убил на это. 8-(

Всем спасибо.

Завтра в отпуск.8-)


 
Sergey13 ©   (2013-08-28 13:46) [9]

Рано радовался. Введенное в гриде сохраняет, а после этого
           DataRow mdr = prolivDataSet.Metering.NewRow();
           mdr["data"] = DateTime.Now;
           prolivDataSet.Metering.Rows.Add(mdr);
           prolivDataSet.Metering.AcceptChanges();
           meteringTableAdapter.Update(prolivDataSet.Metering);

в гриде появляется, но не сохраняется.

ЗЫ: крыша похоже раньше меня съедет в отпуск.8-(


 
antonn ©   (2013-08-28 13:57) [10]

тратишь 5 минут на реализацию интерфейса с датасетом, а в случае проблем пол дня на поиск костылей и попыток разгадать что там в нутрях датасетах... неужели профит от первых пяти минут стоит потенциального геморра?


 
Sergey13 ©   (2013-08-28 14:10) [11]

>antonn
Спасибо. Помог. Я шарпом понемногу занимаюсь три месяца. Базами в нем начал заниматься позавчера вечером, без отрыва от других дел.

Мне нужно реализовать аналог простейшего

MyTable.Insert;
MyTable.FieldByName("Data").AsDateTime=now;
MyTable.Post;

Не въезжаю я как это сделать. Вроде все как в справке, но не выходит каменный цветок.


 
antonn ©   (2013-08-28 14:20) [12]


> Мне нужно реализовать аналог простейшего
>
> MyTable.Insert;
> MyTable.FieldByName("Data").AsDateTime=now;
> MyTable.Post;

если честно то я не понимаю что тут делается :) я как-то все больше через sqlconnection/sqlcommand/sqlreader делаю


 
antonn ©   (2013-08-28 14:21) [13]

нужно сделать инсерт в таблицу отправив одно поле с датой?


 
Sergey13 ©   (2013-08-28 15:04) [14]

>нужно сделать инсерт в таблицу отправив одно поле с датой?
В общем да. На данном этапе хотя бы это. В дельфишных терминах я хотел для простенькой базенки из трех таблиц использовать функционал TTable. Я понимаю, что есть TDataSet и он правильнее и круче, потому что там есть SQL и все такое, но мне пока (по крайней мере) это не интересно - там не будет ни множества пользователей ни удаленных серверов. Это просто хранилка документов, генерируемых моей программой (программулькой с двумя формами, одна из которых - простейшая работа с этой самой недобазенкой).

Самое хреновое, что времени уже почти не осталось... Если б не это, никогда б я тут помощи такой не попросил. Но это уже лирика.


 
Плохиш ©   (2013-08-28 15:10) [15]

а так?

          DataRow mdr = prolivDataSet.Metering.NewRow();
          mdr["data"] = DateTime.Now;
          prolivDataSet.Metering.Rows.Add(mdr);
          meteringTableAdapter.Update(prolivDataSet.Metering);
          prolivDataSet.AcceptChanges();


 
Sergey13 ©   (2013-08-28 15:35) [16]

>Плохиш
Работает!!!!
Не понятно почему, но сохранилось! Я (наверное наивно) полагал, что AcceptChanges - это аналог Post и фиксирует изменения в датасете, а Adapter.Update - переносит изменения из локального датасета собственно в БД. Вроде логично сначала запостить данные в датасете, а потом писать "на диск".
Вот они, плоды беглого образования.

Спасибо огроменное! Не доделаю, так хоть не с "тупиком" на душЕ поеду. А то сегодня ночью во сне уже на шарпе программировал. 8-(


 
Плохиш ©   (2013-08-28 15:42) [17]

TableAdapter в терминах делфи - это TDataSet, а DataSet - TDatabase


 
antonn ©   (2013-08-28 16:08) [18]


> В общем да. На данном этапе хотя бы это.

ну я так бы делал, без костылявых датасетов:
using (System.Data.SqlClient.SqlConnection _sqlConnection = new System.Data.SqlClient.SqlConnection(@"коннекшнстринг"))
           {

               if (_sqlConnection.State == System.Data.ConnectionState.Closed)
               {
                   _sqlConnection.Open();
               }
               using (System.Data.SqlClient.SqlCommand _sqlCmd = new System.Data.SqlClient.SqlCommand())
               {
                   _sqlCmd.Connection = _sqlConnection;
                   _sqlCmd.CommandType = CommandType.Text;
                   _sqlCmd.CommandTimeout = 300;

                       _sqlCmd.CommandText = "insert into skud_cards_froтра-ля-ля)";
                       _sqlCmd.ExecuteNonQuery();

                   _sqlConnection.Close();
               }
           }


 
картман ©   (2013-08-28 16:12) [19]


> Плохиш ©   (28.08.13 15:10) [15]


какой смысл в этом выверте:
         prolivDataSet.Metering.Rows.Add(mdr);
         meteringTableAdapter.Update(prolivDataSet.Metering);
         prolivDataSet.AcceptChanges();


, зачем так сделали?


 
Плохиш ©   (2013-08-28 16:17) [20]


>  зачем так сделали?

Понятия не имею.
Я использую LINQ, там это делается одним методом.


 
Плохиш ©   (2013-08-28 16:18) [21]


> картман ©   (28.08.13 16:12) [19]

А приведённая последовательность в твоей ссылке написана :-P


 
картман ©   (2013-08-28 16:26) [22]


> Плохиш ©   (28.08.13 16:17) [20]
>
>
> >  зачем так сделали?
>
> Понятия не имею.


> А приведённая последовательность в твоей ссылке написана
> :-P

я реализацию библиотеки .Net имел в виду - почему она именно таким образом работает? Т.е. подразумевается, что можно было бы проще и наглядней это сделать. А т.к. маловероятно, что это от кривых рук, интересно, что может дать такая многоступенчатость?


 
Плохиш ©   (2013-08-28 16:38) [23]


> я реализацию библиотеки .Net имел в виду - почему она именно
> таким образом работает?

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


 
Sergey13 ©   (2013-08-28 16:46) [24]

>ну я так бы делал
Я может покопаюсь в этом, подучу матчасть, и тоже так сделаю. 8-)
Но не сегодня.

Еще раз спасибо всем! Особенно Плохишу.


 
картман ©   (2013-08-28 16:47) [25]

        prolivDataSet.Metering.Rows.Add(mdr);
        meteringTableAdapter.Update(prolivDataSet.Metering);
        prolivDataSet.AcceptChanges();


почему бы не сделать:

procedure TDataSet.AcceptChanges(table: TTableAdapter);
begin
 if Assigned(table) then
   table.Update(FMetering);
end;


?


 
Плохиш ©   (2013-08-28 16:56) [26]


> Sergey13 ©   (28.08.13 16:46) [24]

Пожалуйста.


> картман ©   (28.08.13 16:47) [25]

Это один частный случай. В ссылки используются три таблицы.


 
картман ©   (2013-08-29 16:45) [27]

..tables: TList<TTable>); overload;
))


 
icelex ©   (2013-08-29 17:10) [28]


> картман ©   (29.08.13 16:45) [27]

запили расширение, кто мешает?
хотя я, чесслово, датасет использовал до сих пор только для тестов, чтобы запросы проверить.



Страницы: 1 вся ветка

Текущий архив: 2014.02.09;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.008 c
1-1321910834
Mr.Devil
2011-11-22 01:27
2014.02.09
Ошибка при инициализации приложения (0xc0000005)


11-1249636129
Dy1
2009-08-07 13:08
2014.02.09
OnPaint


8-1234116983
Agent[007]
2009-02-08 21:16
2014.02.09
Лицензия


2-1365240597
Exceler
2013-04-06 13:29
2014.02.09
Импорт данных из Эксель


3-1295188339
NightVamp
2011-01-16 17:32
2014.02.09
Использование COUNT в отчёте QReports