Форум: "Прочее";
Текущий архив: 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