0
데이터베이스 액세스에 사용한 다음 패턴에 대한 코드 검토를 제공하는 사람은 누구입니까? 기본 아이디어를 보여주기 위해 더 간단한 데이터 계층 중 하나를 제공했습니다.(3 계층) 데이터베이스 액세스 패턴 코드 검토
특히 공유 방법을 사용하는 것이 좋은 아이디어 였고 그로 인해 어떤 문제가 발생할 수 있는지 궁금한 점이 있습니까? 이 구현은 ASP.Net과 같은 스레드 환경에서 실패합니까?
Public Interface IFillable
Sub Fill(ByVal Datareader As Data.IDataReader)
End Interface
Public Class BaseDataLayer
Public Shared Function FillObject(ByVal IFillable As IFillable, ByVal IDatareader As IDataReader) As IFillable
If IDatareader.Read Then
IFillable.Fill(IDatareader)
Return IFillable
Else
Return Nothing
End If
End Function
Public Shared Function FillCollection(ByVal IFillable As IFillable, ByVal IDatareader As IDataReader) As IFillable
IFillable.Fill(IDatareader)
Dim list As IList = DirectCast(IFillable, IList)
If list.Count > 0 Then
Return IFillable
Else
Return Nothing
End If
End Function
End Class
Public Class SupplierDataLayer
Inherits BaseDataLayer
Public Shared Function GetSupplierListByLastUpdated(ByVal LastUpdated As Date, ByVal FromRow As Integer, ByVal ToRow As Integer, ByVal UserID As Guid) As SupplierList
If Not UserID.Equals(Guid.Empty) Then
Dim res As New SupplierList
Using sqlConn As New SqlConnection(My.Settings.ConnectionString)
sqlConn.Open()
Using dr As IDataReader = SupplierDataLayer.GetSupplierListByLastUpdatedQuery(sqlConn, LastUpdated, FromRow, ToRow, UserID)
Return CType(BaseDataLayer.FillCollection(res, dr), SupplierList)
End Using
End Using
Else
Return Nothing
End If
End Function
Private Shared Function GetSupplierListByLastUpdatedQuery(ByVal Connection As SqlConnection, ByVal LastUpdated As Date, ByVal FromRow As Integer, ByVal ToRow As Integer, ByVal UserID As Guid) As IDataReader
Using sqlCmd As SqlCommand = Connection.CreateCommand
With sqlCmd
.CommandTimeout = 30
.CommandType = CommandType.StoredProcedure
.CommandText = "GetSupplierListByLastUpdated"
.Parameters.Add("@LastUpdated", SqlDbType.DateTime).Value = LastUpdated
.Parameters.Add("@FromRow", SqlDbType.Int).Value = FromRow
.Parameters.Add("@ToRow", SqlDbType.Int).Value = ToRow
.Parameters.Add("@UserID", SqlDbType.UniqueIdentifier).Value = UserID
Return .ExecuteReader
End With
End Using
End Function
End Class
가 너무 밀접하게 그것을 통해보고하지 않은,하지만 밖으로 점프 한 가지는 당신이 당신의 DataReader를 폐쇄하지 않을 것입니다. –
sh ** didnt notice ... 사용하여 포장 된 ... 추신 : 감사합니다 –
"코드 검토"로이 태그를 다시 붙였습니다. 동의하지 않으면 다시 알려줄 수 있습니다. –