⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.vb

📁 东软内部材料(三)程序设计导论
💻 VB
字号:
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Text
Imports System.Security.Cryptography

'该类为整个应用程序提供统一的数据库连接字符串。

Public Class DBConnection

    Shared m_ConnectionString As String

    ' ConnectionString 属性将读取 ASP.NET 系统配置中的 BlueHillDSN 设置,
    ' 以返回一个只读的数据库连接字符串。
    Shared ReadOnly Property ConnectionString() As String
        Get
            ' Web.Config 文件中读取连接字符串配置信息。
            ' 将该字符串保存在静态的字段中,以提高以后访问该属性的速度。

            If m_ConnectionString = "" Then
                '如果是首次读取该属性,则访问Web.Config 文件中的配置信息。
                m_ConnectionString = ConfigurationSettings.AppSettings("BlueHillDSN")
            End If

            ' 返回连接字符串。
            Return m_ConnectionString
        End Get
    End Property
End Class

'该类表示一个公司员工,该类具有保存员工基本信息以及部门和部门经理的各个字段。
'还有三个静态方法:
'   GetEmployeeInfo:从数据库中获取员工基本信息。
'   GetManagerInfo:从数据库中获取所属经理基本信息。
'   GetCEOInfo:从数据库中获取总经理的员工编号。
'所涉及的知识点可以参阅课本第九章到第十一章。

Public Class Employee

    '以下是表示员工信息的字段:
    Public EmployeeID As Integer        '员工编号
    Public ManagerID As Integer         '所属经理的员工编号
    Public DeptID As Integer            '部门编号
    Public Email As String              'Email
    Public Name As String               '员工姓名
    Public ManagerName As String = ""   '所属经理的姓名
    Public ManagerEmail As String = ""  '所属经理的Email
    Public DeptName As String = ""      '部门名称
    Public Telephone As String          '电话号码
    Public SelfIntro As String = ""     '自我介绍
    Public ALhours As Integer = 0       '可用年假小时数
    Public IsManager As Boolean = False '该员工是否为部门经理

    '该函数从数据库中获取员工基本信息,并将这些信息保存在类的字段中。
    '参数 iEmpID:要查找员工的编号。
    '参数 emp:保存数据库的查找结果。
    '返回值:DBResult.Success 或 DBResult.Failed,表示操作成功与否。
    Shared Function GetEmployeeInfo(ByVal iEmpID As Integer, ByRef emp As Employee) As Integer

        ' 创建连接数据库的 Connection 对象。
        Dim cn As New SqlConnection(DBConnection.ConnectionString)

        Dim strSQL As String
        strSQL = "select * from viwwebEmpCommonInfo where EmployeeID=" & iEmpID

        ' 创建 Command 对象执行查询 SQL 语句。
        Dim cmd As New SqlCommand(strSQL, cn)

        ' 设置该 Command 执行的是一条 SQL 语句
        cmd.CommandType = CommandType.Text

        Dim dbReader As SqlDataReader

        Dim iRetValue As Integer = DBResult.Success

        Try
            ' 打开数据库连接,执行对数据库的操作。注意操作数据库会引发异常。
            cn.Open()
            dbReader = cmd.ExecuteReader()

            If dbReader.Read() Then
                '如果找到该员工的数据,则继续执行以下操作:

                '将DataReader 中的信息保存到参数 emp 中。
                emp.EmployeeID = iEmpID
                emp.Name = dbReader("Name")
                emp.DeptID = dbReader("DeptID")
                emp.Email = dbReader("Email")
                emp.Telephone = dbReader("Telephone")

                '保存可用年假小时数
                '编程技巧:如果数据库中的某个字段为 NULL,则不能直接将其赋给整型变量或字符串变量。
                '          如果直接赋值会引发异常,此时可用下面的方法来处理这种情况。
                If Not dbReader("VacationRemain") Is System.DBNull.Value Then
                    emp.ALhours = dbReader("VacationRemain")
                End If

                '保存自我介绍
                If Not dbReader("SelfIntro") Is System.DBNull.Value Then
                    emp.SelfIntro = dbReader("SelfIntro")
                End If

                '获取总经理的员工编号。
                Dim iCEOID As Integer
                GetCEOInfo(iCEOID)

                If emp.EmployeeID = iCEOID Then
                    '如果员工为总经理
                    emp.IsManager = True
                Else
                    '获取员工所属部门的经理的员工编号。
                    GetManagerInfo(emp.DeptID, emp)

                    '判定员工是否为经理
                    If emp.ManagerID = emp.EmployeeID Then
                        emp.IsManager = True

                        '如果员工为经理,则其经理为总经理。
                        Dim empCEO As New Employee
                        Employee.GetEmployeeInfo(iCEOID, empCEO)

                        emp.ManagerName = empCEO.Name
                        emp.ManagerID = empCEO.EmployeeID
                        emp.ManagerEmail =empCEO.Email 
                    End If
                End If

                iRetValue = DBResult.Success
            Else
                iRetValue = DBResult.Failed
            End If

        Catch e As Exception
            ' 产生异常,则对 iRetValue 赋值标志数据库操作失败。
            iRetValue = DBResult.Failed
        Finally
            ' 关闭 DataReader 和数据库连接,以节省系统资源。
            dbReader.Close()

            If cn.State = ConnectionState.Open Then
                cn.Close()
            End If
        End Try

        Return iRetValue
    End Function

    '该函数从数据库中获取指定部门经理的基本信息,并将这些信息保存在参数 emp 的字段中。
    '参数 iDeptID:部门编号。
    '参数 emp:保存数据库的查找结果。
    '返回值:DBResult.Success 或 DBResult.Failed,表示操作成功与否。
    Shared Function GetManagerInfo(ByVal iDeptID As Integer, ByRef emp As Employee) As Integer

        ' 创建连接数据库的 Connection 对象。
        Dim cn As New SqlConnection(DBConnection.ConnectionString)

        Dim strSQL As String
        strSQL = "select * from viwwebManagerInfo where DeptID=" & iDeptID

        ' 创建 Command 对象执行查询 SQL 语句。
        Dim cmd As New SqlCommand(strSQL, cn)

        ' 设置该 Command 执行的是一条 SQL 语句
        cmd.CommandType = CommandType.Text

        Dim dbReader As SqlDataReader

        Dim iRetValue As Integer = DBResult.Success

        Try
            ' 打开数据库连接,执行对数据库的操作。注意操作数据库会引发异常。
            cn.Open()

            ' 将数据库的返回结果保存在 DataReader 中。
            ' 编程技巧:如果返回结果是单个标量值,如一个整数或一个字符串,
            '           则可以执行 Command 对象的 ExecuteScalar 方法直接获取该值。
            dbReader = cmd.ExecuteReader()

            If dbReader.Read() Then
                '如果有返回数据可用。

                '将 DataReader 中的结果保存在 emp 对象中。
                emp.DeptName = dbReader("DeptName")
                emp.ManagerName = dbReader("ManagerName")
                emp.ManagerEmail = dbReader("ManagerEmail")
                emp.ManagerID = dbReader("ManagerID")

                dbReader.Close()
                iRetValue = DBResult.Success

            Else
                dbReader.Close()
                iRetValue = DBResult.Failed
            End If
        Catch e As Exception
            ' 产生异常,则对 iRetValue 赋值标志数据库操作失败。
            iRetValue = DBResult.Failed

        Finally

            ' 关闭数据库连接,以节省系统资源。
            If cn.State = ConnectionState.Open Then
                cn.Close()
            End If
        End Try

        Return iRetValue
    End Function

    '该函数从数据库中获取总经理的员工编号。
    '参数 iCEOID:保存数据库的查找结果。
    '返回值:DBResult.Success 或 DBResult.Failed,表示操作成功与否。
    Shared Function GetCEOInfo(ByRef iCEOID As Integer) As Integer

        ' 创建连接数据库的 Connection 对象。
        Dim cn As New SqlConnection(DBConnection.ConnectionString)
        Dim cmd As New SqlCommand("spwebGetCEOInfo", cn)

        ' 设置该 Command 执行的是一个存储过程
        cmd.CommandType = CommandType.StoredProcedure

        ' 为存储过程添加返回参数,该参数的值如果为 0 则表示数据库操作失败,非 0 则为成功。
        Dim paramReturn As New SqlParameter("@ReturnValue", SqlDbType.Int)
        paramReturn.Direction = ParameterDirection.ReturnValue
        cmd.Parameters.Add(paramReturn)

        Dim iRetValue As Integer = DBResult.Success

        Try
            ' 打开数据库连接,执行对数据库的操作。注意操作数据库会引发异常。
            cn.Open()

            ' Command 对象的 ExecuteNonQuery 方法用来执行不返回记录集的 SQL 语句或存储过程。
            cmd.ExecuteNonQuery()

        Catch e As Exception
            ' 产生异常,则对 iRetValue 赋值标志数据库操作失败。
            iRetValue = DBResult.Failed

        Finally
            ' 关闭数据库连接,以节省系统资源。
            If cn.State = ConnectionState.Open Then
                cn.Close()
            End If
        End Try

        If paramReturn.Value > 0 Then
            '如果返回参数的值大于 0,则标识数据库操作成功。
            iCEOID = paramReturn.Value
        Else
            '否则标识数据库操作失败。
            iRetValue = DBResult.Failed
        End If

        Return iRetValue

    End Function

End Class

' 该枚举类型表示数据库操作的成功与否,分别用 1 和 0 表示。
' 编程技巧:该枚举类型可直接对整数类型的变量进行赋值。
Public Enum DBResult
    Success = 1
    Failed = 0
End Enum

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -