Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.02.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.003 c
15-1377069296
Els
2013-08-21 11:14
2014.02.09
Хороший форум по программированию


2-1364643389
TStas
2013-03-30 15:36
2014.02.09
Как нажать кнопку в чужом Ворде?


2-1364804378
dmitry87
2013-04-01 12:19
2014.02.09
работа с sqlite в xe3


2-1364812253
dronchik
2013-04-01 14:30
2014.02.09
Как обратиться к объекту в цикле


15-1377527842
Дальний Восток
2013-08-26 18:37
2014.02.09
Наводнение на Дальнем Востоке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский