Может ли статическое SqlDBConnection заставить поток получить набор результатов другого потока? - PullRequest
0 голосов
/ 26 марта 2012

При попытке отладить проблему с проектом ASP.NET коллега заметил, что метод создает экземпляр статического SqlConnection.

Если несколько потоков одновременно используют один и тот же SqlConnection, может ли SqlCommand одного потока случайно получить набор результатов из SqlCommand другого потока?

Например, рассмотрим два одновременных запроса к одной и той же странице ASP.NET:

Запрос 1:

Dim Shared DbConnection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("DbConnectionString"))
Dim Query As SqlCommand = New SqlCommand("EXEC up_ShowReportInMenu 'abc',...", DbConnection)
...
Dim Reader As SqlDataReader = Query.ExecuteReader

Запрос 2:

Dim Shared DbConnection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("DbConnectionString"))
Dim Query As SqlCommand = New SqlCommand("EXEC up_ShowReportInMenu 'def',...", DbConnection)
...
Dim Reader As SqlDataReader = Query.ExecuteReader

Возможно ли, что Читатель в Запросе 2 мог случайно получить доступ к набору результатов из запроса, выполненного SqlCommand в Запросе 1?

P.S. Не волнуйтесь, мы изменим это, чтобы больше не быть статичными. Просто интересно, могло ли это вызвать те проблемы, которые у нас были.

1 Ответ

0 голосов
/ 26 марта 2012

Согласно документации MSDN для SqlConnection :

"Любые открытые статические (Shared в Visual Basic) члены этого типа являются поточно-ориентированными. Любые члены экземпляра не гарантируютсябыть потокобезопасным. "

Так что да, доступ к одному и тому же экземпляру SqlConnection из нескольких потоков будет проблемой (даже косвенно через SqlCommand s).

...