Понимание общего члена в vb.net в контексте, описанном ниже

#vb.net

Вопрос:

Я использую класс-оболочку для доступа к данным sql server в vb.net по этой ссылке ADO.NET Компонент доступа к данным для SQL Server на C# и VB.NET

Теперь по этой ссылке, если мы увидим vb.net переменная второго класса(SqlComm и SqlDA ) объявляется как

 Public Class VBDataAccess(Of TConnection As IConnection) 
Shared SqlComm As SqlCommand = Nothing 
Shared SqlDA As SqlDataAdapter = Nothing
 

и они используются в общем методе класса следующим образом

 Public Shared Function NonQuery(ByVal CommandText As String, _
       ByVal ParameterValues As List(Of SqlParameter), _
       ByVal CommandType As CommandType) As Integer
    
    Dim res As Integer = 0
    Dim SqlConn As SqlConnection = Connection
    SqlConn.Open()
    
    Try
        SqlComm = New SqlCommand(CommandText, SqlConn)
        SqlComm.CommandTimeout = 600
        SqlComm.CommandType = CommandType
        If (ParameterValues IsNot Nothing) Then
            For Each Parameter In ParameterValues
                SqlComm.Parameters.Add(Parameter)
            Next
        End If
        res = SqlComm.ExecuteNonQuery()
    Catch ex As Exception
        Throw ex
    End Try
    Return res
End Function
 

Как этот SqlComm будет вести себя в случае одновременного доступа нескольких пользователей к функции. Создаст ли это какие-либо проблемы ?

Комментарии:

1. Я бы не стал использовать этот код. Объект SqlCommand реализует IDisposable, и он не удаляется, будучи статическим членом класса.

2. @Craig, но SqlComm объявлен на уровне класса как общий, а не внутри функции

3. Вы абсолютно правы, я пропустил это, поэтому я удалил свой предыдущий комментарий. Вы правы, что существует потенциально серьезная проблема, если несколько пользователей могут одновременно выполнять эту функцию. Первый может попытаться выполнить запрос на частично настроенном SqlComm (и который будет частично настроен для неправильного запроса).

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

5. 1 к тому, что сказал Хардкод. Однако, помимо этого, основываясь на показанном вами использовании, я не вижу абсолютно никаких причин для объявления SqlComm и SqlDA общими полями уровня класса