📄 common.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 + -