Каково различие между транзакцией SQL на уровне хранимой процедуры и один на уровне SqlConnection?

Я лично предпочитаю вариант (3) в качестве решения. Он используется почти на всех сайтах моего бывшего (фамилии) работодателя. Это означает, что вы можете получить некоторых разработчиков интерфейса, которые знают все о Javascript, особенностях браузера и еще много чего, чтобы закодировать ваш интерфейс. Им нужно знать только «curl xyz, и вы получите немного json», и они уходят.

Тем временем ваши тяжелые бэкэнды могут кодировать поставщиков Json. Этим ребятам вообще не нужно думать о представлении, а вместо этого беспокоятся о нестабильных бэкэндах, тайм-аутах, изящной обработке ошибок, пулах соединений с базами данных, потоке, масштабировании и т. Д.

Вариант 3 дает хорошую, прочную трехуровневую архитектуру. Это означает, что материал, который вы выплевываете из внешнего интерфейса, оптимизирован для SEO, может быть приспособлен для работы со старыми или новыми браузерами (и с отключенным JS), и все же может быть Javascript на стороне клиента, если хотите (можно делайте что-то вроде обработки старых браузеров / googlebot со статическим HTML, но отправляйте JS встроенные динамические приложения людям, использующим последний браузер Chrome или любой другой).

Во всех случаях, которые я видел в Варианте 3, это была пользовательская реализация некоторого PHP, который не особенно переносим между проектами, не говоря уже о том, чтобы выходить на землю с открытым исходным кодом. Я предполагаю, что совсем недавно PHP, возможно, заменили на Ruby / Rails, но то же самое по-прежнему верно.

FWIW, $ current_employer мог бы сделать с вариантом 3 в нескольких важных местах. Я ищу хороший Ruby-фреймворк для сборки чего-либо. Я уверен, что смогу собрать воедино множество драгоценных камней, но я бы предпочел один продукт, который в целом предоставляет шаблонное, «скручиваемое», дополнительное аутентификация, дополнительное решение для кэширования с использованием memcache / nosql. Там я не могу найти ничего связного: - (

6
задан Cade Roux 26 June 2009 в 20:09
поделиться

2 ответа

Для ADO.NET никакой разницы. Это неявно указано в MSDN, где для объекта SqlTransaction метод Commit считается «неудачным, если транзакция уже была откатана на сервере».

Кроме того, SQL Server Profiler показывает «SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN TRAN» как только вы выполните .BeginTransaction в соединении.

Однако для ADO (не .NET) это не так. Раньше это позволяло создавать приятные сценарии с вложенными транзакциями (серверные транзакции были вложены в клиентские). Несмотря на то, что я использовал это много, я не могу точно определить, что такое «клиентская транзакция» в этом случае.

3
ответ дан 17 December 2019 в 04:51
поделиться

Если вы собираетесь вызывать несколько сохраненных процессов подряд и хотите иметь возможность отката, вам нужно управлять транзакцией из вашего кода с помощью SqlConnection.BeginTransaction () . В остальном то же самое.

2
ответ дан 17 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: