![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Научите меня быть умным! (.NET) Отсоединенное соединение. [D1]
Курдль © (2004-06-04 09:20:00)...или отключенное подключение :)
На самом деле вопрос очень важный! Ведь при переходе на Delphi 8 и технологию .NET возникает крушение стереотипов!
Видимо придется проститься со старыми принципами подключения к БД. Например, как раньше, - открыть приложение, совершить типа DataBase.Connection.Open, поработать и в конце дня сделать DataBase.Connection.Close - непозволительная роскошь!
Вот и вопрос. Кто может поделиться материалами, ссылками, опытом по созданию проектов .NET в части касающейся работы с Connection-ами?
Delirium (2004-06-04 15:16:00) [21]Вы меня не понимаете я вижу, сама связка "DBGrid-DataSource-DataSet-DataBase", уже порочна. Нельзя превращать приложение в on-line редактор для БД. Так делают лишь для локальных DBF-таблиц, да и то редко. Использование ADO в том числе и старого, подразумевает толстого клиента, собственно для и этого и придуман 'ADODB.Recordset' - для возможности "отвязаться" от сервера.
Курдль (2004-06-04 15:10:00) [22]
> а все ваши существующие win32-приложения постоянно держат
> коннект с базой?
А спрогнозируйте-ка поведение данных в связкеDBGrid-DataSource-DataSet-DataBase, если кому-то из последних сделатьclose?
Delirium (2004-06-04 15:05:00) [23]"открыть приложение, совершить типа DataBase.Connection.Open, поработать и в конце дня сделать DataBase.Connection.Close - непозволительная роскошь!" - Гхм, а все ваши существующие win32-приложения постоянно держат коннект с базой? В таком случае настоятельно рекомендую поскорее "крушить стереотипы"! Ибо не правильно сие не только для .Net, но и для любой другой платформы.
Курдль (2004-06-04 15:02:00) [24]
> и вам советую
И напрасно!
если есть код
beginто зачем писать
a := b;
end;
begin
begin
a := b;
end;
end;
?
Polevi (2004-06-04 14:57:00) [25]>по умолчанию открывает транзакцию неявно
не люблю я эти неявно.. по умолчанию
и вам советую
Курдль (2004-06-04 14:03:00) [26]
> это откуда такой вывод последовал интересно
Да от того же верблюда, что и TQuery.ExecSQL:
cmd.ExecuteNonQuery();по умолчанию открывает транзакцию неявно, утверждает ее в случае успеха и откатывает по ошибке.
Polevi (2004-06-04 13:37:00) [27]>В данном случае, как раз, использование транзакции не оправдано.
это откуда такой вывод последовал интересно
Sergey_Masloff (2004-06-04 13:36:00) [28]Курдль © (04.06.04 10:52) [8]
>А отделять данные от их представления не так-то просто.
Да и часто не так-то нужно как это представляется в умных книжках ;-)
Курдль (2004-06-04 10:52:00) [29]В данном случае, как раз, использование транзакции не оправдано.
А отделять данные от их представления не так-то просто.
Ведь идеология делфей въелась намертво! :)
Polevi (2004-06-04 10:27:00) [30]по стилю .NET каждой форме желательно ..
причем тут формы вообще ? учись отделять данные от их представления
connection динамически создавай
public void UpdateData(String sql)
{
SqlConnection conn=new SqlConnection(ConnString);
try
conn.Open();
SqlTransaction tran=conn.BeginTransaction(IsolationLevel.Serializable);
SqlCommand cmd=new SqlCommand();
cmd.Connection=conn;
cmd.Transaction=tran;
cmd.CommandText=sql;
cmd.ExecuteNonQuery();
tran.Commit();
catch
{
if(tran!=null)
tran.RollBack();
}
finally
conn.Close();
end;
}
и посмотри DataAdapter
Курдль (2004-06-04 10:19:00) [31]
> ZrenBy © (04.06.04 10:17) [5]
> >Курдль ©
> Гы. Вспоминается спор о транзакциях :)
Да-да! :) Но это именно тот случай, когда бе них не обойтись.
Т.е. когда производится большое количество последовательных обновлений (задействовано несколько таблиц, процедур, срабатывали триггеры) и все это должно быть либо корректно утверждено, либо начисто откачено.
ZrenBy (2004-06-04 10:17:00) [32]>Курдль ©
Гы. Вспоминается спор о транзакциях :)
Курдль (2004-06-04 10:05:00) [33]
> Mike_Goblin © (04.06.04 09:53) [3]
> существует документация и примеры
Пожалуйста! Любую ссыдку - хоть на книжки, хоть по авторам!
А то вся литература весьма поверхностна и чаще всего повторяется!
> создали объект соединения, подключились, получили/отправили
> данные, отключились, убили объект.
Это, вроде как, понятно. Но дело в том, что иногда возникает сложная цепочка обновлений, вызываемая разными модулями (формами), но находящаяся внутри одной транзакции.
В то же время, по стилю .NET каждой форме желательно иметь по собственному Connection. Как в таком случае объять всё одной транзакцией?
Mike_Goblin (2004-06-04 09:53:00) [34]существует документация и примеры
PS все гораздо хуже
создали объект соединения, подключились, получили/отправили данные, отключились, убиди объект.
Курдль (2004-06-04 09:49:00) [35]А существуют ли рекомендации лучших собаководов типа "MS настоятельно советует делать так:..."
Мне надо по максимуму аргументировать!
Polevi (2004-06-04 09:40:00) [36]там все просто с коннекшнами
открыли
выбрали данные
закрыли
работаем с данными
открыли
запостили изменения
закрыли