Обойдя SqlConnection - PullRequest
       13

Обойдя SqlConnection

1 голос
/ 21 мая 2010

Я создал TransactionScope, и в рамках этой области различные элементы создаются и обновляются в базе данных.Во время этого процесса я делаю много звонков в базу данных.Первоначально я открыл SqlConnection в начале TransactionScope и передал его любой функции, которая выполняла вызов БД, затем закрыл соединение после всех вызовов и до совершения транзакции.Лучше сделать это или открыть и закрыть соединение (используя одну и ту же строку соединения) для каждого вызова?

Ответы [ 4 ]

4 голосов
/ 21 мая 2010

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

Создание SQLConnection почти бесплатное благодаря механизмам пула соединений ADO.NET, поэтому не думайте, что вы собираетесь сэкономить пространство / время, создав его и передав его.

Если, как и в вашей ситуации, вам действительно необходимо выполнить ряд операций с БД в пределах области транзакции, то соответствующим образом управляйте своей областью действия, но создавайте, используйте и распоряжайтесь своими соединениями, как и когда они вам нужны - это ' Поможем сохранить ваш код ОЧЕНЬ чище и безопаснее.

4 голосов
/ 21 мая 2010

Если вы собираетесь делать много звонков подряд, и легко открыть открытое соединение, тогда да, повторно используйте открытое соединение.

Это не невероятно важно, хотя. Не так много, как раньше. ADO.NET хорошо справляется с этой задачей. См. Пул подключений . Если ваш код станет сложным и странным, чтобы упростить один единственный открытый объект соединения, это того не стоит.

(Теперь убедиться, что ваши объекты подключения (независимо от того, используются они повторно или нет) утилизированы , конечно, очень важно, как я уверен, вы уже знаете)

2 голосов
/ 25 мая 2010

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

Несколько соединений отодин и тот же пул, использующий одну и ту же базу данных, также считается в этом смысле как несколько соединений.

Если это проблема для вас, в отличие от структуры кода или «чистоты», типичного времени выполнения оператора SQL и т. д.,вам нужно решить.

0 голосов
/ 21 мая 2010

В любом случае, если вы хотите иметь несколько соединений с БД, используйте пул соединений .

...