📄 datalayer.vb
字号:
'---------------------------------------------------------------------
' This file is part of the Microsoft .NET Framework SDK Code Samples.
'
' Copyright (C) Microsoft Corporation. All rights reserved.
'
' This source code is intended only as a supplement to Microsoft
' Development Tools and/or on-line documentation. See these other
' materials for detailed information regarding Microsoft code samples.
'
' THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
' KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
' IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
' PARTICULAR PURPOSE.
'---------------------------------------------------------------------
Imports System.Net
Imports System.Threading
Imports System.Web.Services.Protocols
Imports Common
Public Enum DataLayerResult
None = 0
Success = 1
ServiceFailure = 2
UnknownFailure = 3
ConnectionFailure = 4
AuthenticationFailure = 5
End Enum
Public Class DataLayer
Private m_Ticket As String = Nothing
Private Const c_wsTimeout As Integer = 30000 '30 seconds
Private m_CurrentUser As New Common.Business.User
Private m_States As ArrayList
Private m_Priorities As ArrayList
Private m_Users As List(Of Business.User)
Private m_Projects As List(Of Business.Project)
Public ReadOnly Property CurrentUser() As Common.Business.User
Get
Return m_CurrentUser
End Get
End Property
Public ReadOnly Property States() As ArrayList
Get
Return m_States
End Get
End Property
Public ReadOnly Property Priorities() As ArrayList
Get
Return m_Priorities
End Get
End Property
Public ReadOnly Property Users() As List(Of Business.User)
Get
LazyLoadUsers()
Return m_Users
End Get
End Property
Public ReadOnly Property Projects() As List(Of Business.Project)
Get
LazyLoadProjects()
Return m_Projects
End Get
End Property
Public Sub New()
'CurrentUserInformation is a type that exists on the web service
'hence we lose default implementation
m_CurrentUser.UserID = -1
m_CurrentUser.Email = String.Empty
m_CurrentUser.FullName = String.Empty
m_CurrentUser.Name = String.Empty
m_CurrentUser.Password = String.Empty
End Sub
#Region " Login "
Public Function Login(ByVal userName As String, ByVal userPassword As String) As DataLayerResult
'save the user information
m_CurrentUser.Name = userName
m_CurrentUser.Password = userPassword
'try to get a ticket
Dim ticketResult As DataLayerResult = GetAuthorizationTicket()
If ticketResult = DataLayerResult.Success Then
Return DataLayerResult.Success
Else
Return DataLayerResult.AuthenticationFailure
End If
End Function
#End Region
#Region " Auth Service "
Private Function GetAuthorizationTicket() As DataLayerResult
Try
' Note: Don't forget password decrypt / encrypt protection schemes here
Dim facade As New Database.UserFacade
Dim sql As String = Database.Columns.User.Name + "=""" + m_CurrentUser.Name + """"
sql += " AND " + Database.Columns.User.Password + "=""" + m_CurrentUser.Password + """"
Dim biz As Business.User = TryCast(facade.GetUserArrayWhere(sql)(0), Business.User)
If Not biz Is Nothing Then
m_Ticket = "Login_OK"
' Note: Password should probably be encrypted here
m_CurrentUser = biz
InitializeCache()
End If
Catch ex As Exception
m_Ticket = Nothing
Return HandleException(ex)
End Try
If m_Ticket Is Nothing Then
'username/password failed
Return DataLayerResult.AuthenticationFailure
End If
Return DataLayerResult.Success
End Function
Private Sub InitializeCache()
InitializeStates()
InitializePriorities()
End Sub
Private Sub InitializeStates()
Dim facade As New Database.StateFacade
m_States = facade.GetAllStates
End Sub
Private Sub InitializePriorities()
Dim facade As New Database.PriorityFacade
m_Priorities = facade.GetAllPriorities
End Sub
Private Sub LazyLoadUsers()
m_Users = New List(Of Business.User)
Dim facade As New Database.UserFacade
m_Users.AddRange(CType(facade.GetAllUsers.ToArray(GetType(Business.User)), Business.User()))
End Sub
Private Sub LazyLoadProjects()
m_Projects = New List(Of Business.Project)
Dim facade As New Database.ProjectFacade
m_Projects.AddRange(CType(facade.GetAllProjects.ToArray(GetType(Business.Project)), Business.Project()))
End Sub
Public Function UpdateCurrentUser() As DataLayerResult
Try
Dim facade As New Database.UserFacade
facade.UpdateUser(m_CurrentUser)
Catch ex As Exception
Return HandleException(ex)
End Try
Return DataLayerResult.Success
End Function
Public Function GetAssignment(ByVal AssignedID As Integer) As Common.UserEventArgs
Dim facade As New Database.UserFacade
Dim user As Business.User = facade.GetUser(AssignedID)
' Assign a default user
If user Is Nothing Then user = m_Users(0)
Return New Common.UserEventArgs(user)
End Function
#End Region
#Region " Helper Functions "
Private Function HandleException(ByVal ex As Exception) As DataLayerResult
LogError.Write(ex.Message & vbNewLine & ex.StackTrace)
If ex.GetType() Is GetType(WebException) Then
Return DataLayerResult.ConnectionFailure
ElseIf ex.GetType() Is GetType(SoapException) Then
Return DataLayerResult.ServiceFailure
Else
Return DataLayerResult.UnknownFailure
End If
End Function
#End Region
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -