前言:
上面介绍了反射工厂,那么这篇文章来介绍一下怎么通过配置文件来实现数据库的更换。
内容:
7、配置文件
<connectionStrings>
<!--数据库连接-->
<add name="UI.My.MySettings.charge_sysConnectionString" connectionString="Data Source=杨楠;Initial Catalog=charge_sys;User ID=sa;Password=123456" providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="sqlConnStr" value="server=.;database=charge_sys;User ID=sa;Password=123456" />
<add key="DB" value="DAL" />
<!--DAL-类库名-->
<!--DB-字符串,通过字符串找到对应的类库-->
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>
这里面有两个节点,一个是<connectionStrings>节点,一个是<appSettings>节点。
(1)<appSettings>节点
主要是用来存储应用程序配置信息,如文件路径,xml Web services URL 或存储在应用程序的 .ini文件中的任何信息。
例如:想要找到本地文件,可通过键/值对,来找到对应的文件。上面那个“DB”就是一个字符串,通过设定的字符
串找到对应的类库。
--读取节点配置:
'定义变量,获得数据库连接字符串
Dim str As String = System.Configuration.ConfigurationSettings.AppSettings("sqlConnStr")
(2)<connectionStrings>节点
主要是用来配置数据库连接。如果要更换数据库,只需更改providerName。
<add name="UI.My.MySettings.charge_sysConnectionString" connectionString="Data Source=杨楠;Initial Catalog=charge_sys;User ID=sa;Password=123456" providerName="System.Data.SqlClient" />
<!--providerName="System.Data.SqlClient为默认值 说明使用的是SQlServer数据库-->
<!--providerName="System.Data.OracleClient 说明使用的是Oracle数据库-->
<add name="connstr" connectionString="Data Source=杨楠; Initial Catalog=charge_sys; User ID=sa;Password=123456" providerName="System.Data.OracleClient" />
--读取节点配置
Dim conn string =System.Configuration.ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
8、BLL层
bll层为逻辑判断层,进行必要的逻辑判断。下面我们就来看看bll层是怎么进行判断的吧。
Imports System.Data.SqlClient
Imports Entity
Imports IDAL
Imports Factory
Public Class LoginBLL
'检查用户是否存在
Public Function ExistUser(ByVal UserInfo As Entity.Entity) As List(Of Entity.Entity)
Dim factory As New Factory.LoginFactory 'Factory.LoginFactory()
Dim Iuser As IDAL.LoginIDAL
Dim mylist As List(Of Entity.Entity)
'调用检查用户的工厂方法
Iuser = factory.CheckUserInfo()
mylist = Iuser.selectUser(UserInfo)
If mylist.Count = 0 Then
Throw New Exception("登录失败,请检查用户名和密码是否正确")
End If
If mylist(0).State.Trim() = "True " Then
Throw New Exception("该用户已登录,请勿重复登录!")
Else
' MsgBox("登录成功,请进入系统")
Return mylist
End If
End Function
'更改登录状态
Public Function ChangeStatus(ByVal UserInfo As Entity.Entity)
Dim dt As Integer
Dim UserFactory As New Factory.LoginFactory
Dim IUserInfo As IDAL.LoginIDAL
IUserInfo = UserFactory.CheckUserInfo()
dt = IUserInfo.UpdataUserStatus(UserInfo)
If dt > 0 Then
Return True
Else
Return False
End If
End Function
'插入工作记录
Public Function AddWorkLog(ByVal worklog As Entity.WorkLogEntity)
Dim dt As Integer
Dim WorkFactory As New Factory.WorkLogFactory
Dim IWorkLog As IDAL.IWorkLog
IWorkLog = WorkFactory.CheckWorkLog()
dt = IWorkLog.InsertWorkLog(worklog)
If dt > 0 Then
Return True
Else
Return False
End If
End Function
9、Facade层
Imports BLL
Imports Entity
Public Class LoginFacade
'检查用户是否存在
Public Function CheckUser(ByVal UserInfo As Entity.Entity) As List(Of Entity.Entity)
Dim isUserExists As New BLL.LoginBLL
Dim mylist As List(Of Entity.Entity)
mylist = isUserExists.ExistUser(UserInfo)
Return mylist
End Function
'更改用户工作状态
Public Function changeStatus(ByVal UserInfo As Entity.Entity)
Dim dt As Integer
Dim isUserExists As New BLL.LoginBLL
dt = isUserExists.ChangeStatus(UserInfo)
Return dt
End Function
'插入工作记录
Public Function AddWorkLog(ByVal worklog As Entity.WorkLogEntity)
Dim dt As Integer
Dim isAddWorkLog As New BLL.LoginBLL
dt = isAddWorkLog.AddWorkLog(worklog)
Return dt
End Function
End Class
10、UI层
用户交互界面,可进行简单的输入条件判断,不是不能进行判断。
例如:判断是否为空,是否是数字等等。
Imports Entity.Entity
Imports Facade.LoginFacade
Public Class Form1
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
End
End Sub
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
Dim worklog As New Entity.WorkLogEntity '实例化WorkLogEntity
Dim facade As New Facade.LoginFacade '定义一个外观层对象
Dim UserInfo As New Entity.Entity '实例化对象,用于各层传递数据
Dim mylist As New List(Of Entity.Entity)
If (txtUserID.Text = "" Or txtPWD.Text = "") Then
MsgBox("用户名或密码不能为空", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
txtUserID.Focus()
txtPWD.Focus()
Exit Sub
End If
Try
'将文本框中的值传给实体层对象让他带上参数
UserInfo.userID = txtUserID.Text.Trim()
UserInfo.PWD = txtPWD.Text.Trim()
'判断用户能否登录
mylist = facade.CheckUser(UserInfo)
' worklog.UserID = UserInfo.userID
Entity.CommonVariable.CommonUserID = UserInfo.userID
Entity.CommonVariable.CommonUserPWD = UserInfo.PWD
'登录成功,更新用户的登录状态
facade.changeStatus(UserInfo)
'更新Worklog
facade.AddWorkLog(worklog)
'MessageBox.Show("charuchenggong")
Select Case mylist(0).Level.Trim()
Case "学生"
frMainStu.Show()
Case "一般用户"
frmMain.Show()
frmMain.操作员ToolStripMenuItem.Visible = False
frmMain.管理员ToolStripMenuItem.Visible = False
Case "操作员"
frmMain.Show()
frmMain.管理员ToolStripMenuItem.Visible = False
Case "管理员"
frmMain.Show()
End Select
Me.Hide()
'DataTable '表示一个内存中数据表,是一个临时保存数据的网络虚拟表,无需代码就可以简单的绑定数据库
Catch ex As Exception
MsgBox(ex.Message, , "数据库操作")
txtUserID.Focus()
txtUserID.SelectAll()
txtPWD.Text = ""
End Try
End Sub
'获取与主机ip有关的地址列表
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim Addre() As System.Net.IPAddress
Addre = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList
Label3.Text = System.Net.Dns.GetHostName().ToString()
End Sub
End Class
总结:
1、每一层都要引用下一层,需要我们好好掌握那个七层包图,了解各个层是怎样的调用关系,然后再添加引用。
2、每一层都要调用下一层的方法,需要我们先敲出下一层的方法,然后在调用该方法。