2022年设备管理系统的核心代码 2.pdf
连接数据库的代码都放置在了DBConnect 类中,其私有成员变量:public string StringConnect; public string StringCommand; private SqlConnection sqlConn; private SqlCommand sqlComm; private SqlDataReader sqlReader; private SqlDataAdapter sqlAdapter; private DataTable dt; 其中,两个 string 类型的变量分别用做DBConnect 类连接数据库时使用的连接字符串和其他成员函数传递SQL 代码到数据库中。其他成员变量为.NET Framework 提供了连接数据库的类型对象。/获取当前用户的信息public bool CheckLogin(string id, string pwd) bool res = false; StringCommand = Select count(*) from tblUser where Id= + id + and Pwd= + pwd + ; try Open(); if (int)sqlComm.ExecuteScalar() 0) res = true; catch (Exception ex) MessageBox .Show(ex.Message); finally Close(); return res; 备份数据库和还原数据的代码独立于DBClass,放置在 BackupDB 中, 备份和还原的功能实现均是 SQL Server 2008 提供的,本系统只是传递了SQL 代码信息而已,代码如下:public static void Backup() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - string strComm = use master; + BACKUP DATABASE EquipmentManagement + TO DISK = + backfileDirectory + + GetDefaultFileName() + + WITH FORMAT; + use EquipmentManagement; ; SqlCommand sqlComm = new SqlCommand(strComm, sqlConn); try sqlConn.Open(); sqlComm.ExecuteNonQuery(); MessageBox.Show(已完成备份,备份文件位于n + backfileDirectory + 文件夹中。); catch (Exception ex) MessageBox.Show(备份时发生错误: + ex.Message); finally sqlConn.Close(); public static void Restore() /杀死 Equipment数据库相关进程if (!KillProcessTo(EquipmentManagement) return; System.DateTime today = System.DateTime.Today; string fileSelected = GetFileSelectedPath(backfileDirectory); if(fileSelected != null) string strComm = use master; + /将数据库设置为单用户模式EXEC sp_dboption EquipmentManagement, SINGLE USER, TRUE; + RESTORE DATABASE EquipmentManagement + FROM DISK = + fileSelected + + WITH REPLACE + use EquipmentManagement; ; SqlCommand sqlComm = new SqlCommand(strComm, sqlConn); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - try sqlConn.Open(); sqlComm.ExecuteNonQuery(); MessageBox.Show(已从 + fileSelected + 文件完成还原。 ); catch (Exception ex) MessageBox.Show(还原时发生错误: + ex.Message); finally sqlConn.Close(); BuyObject、DeviceObject、Manager类型对象主要是为了客户端便于与数据库交互,它们分别代码数据库中的三张表:购置表、设备表和管理人员表,类的成员变量分别对应数据库中的表的字段。ImagePathConverter 和PasswordConverter 两个用户在执行数据绑定时,可以将数据绑定到WPF控件之前,将数据表达成或者说转化为另一种形式显示。工程中的 SubWindows文件夹中保存了若干个UserControl控件,每个控件将作为一个子窗口动态的替换(或添加,如果主窗口中没有其他子窗口)到主窗口中。 . . 替换子窗口的后台代码为,首先在主窗口的类(WindowMani 中为每个子窗口添加一个成员变量,在需要执行切换窗口的时候声明并使用):public partial classWindowMain : RibbonWindow private SubWindows.BuyEquipment subwindow_BuyEquipment; private SubWindows.ManagementEquipment subwindow_ManagementEquipment; private SubWindows.Users subwindow_Users; private SubWindows.UserSwitch subwindow_UserSwitch; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - private SubWindows.BackupDB subwindow_BackupDB; private SubWindows.TransferEquipment subwindow_TransferEquipment; private SubWindows.RemoveEquipment subwindow_RemoveEquipment; private SubWindows.ErrorRecord subwindow_ErrorRecord; private SubWindows.RepairRecord subwindow_RepairRecord; . . /设备购置private void ribbonButton111_Click(object sender, RoutedEventArgs e) if (subwindow_BuyEquipment = null) subwindow_BuyEquipment = new SubWindows.BuyEquipment(); ShowSubWindow(subwindow_BuyEquipment); /设备记录private void ribbonButton121_Click(object sender, RoutedEventArgs e) if (subwindow_ManagementEquipment = null) subwindow_ManagementEquipment = new SubWindows.ManagementEquipment(); ShowSubWindow(subwindow_ManagementEquipment); /设备调拨private void ribbonButton112_Click(object sender, RoutedEventArgs e) if (subwindow_TransferEquipment = null) subwindow_TransferEquipment = new SubWindows.TransferEquipment(); ShowSubWindow(subwindow_TransferEquipment); /设备报废private void ribbonButton113_Click(object sender, RoutedEventArgs e) if (subwindow_RemoveEquipment = null) subwindow_RemoveEquipment = new SubWindows.RemoveEquipment(); ShowSubWindow(subwindow_RemoveEquipment); /故障记录private void ribbonButton131_Click(object sender, RoutedEventArgs e) if (subwindow_ErrorRecord = null) subwindow_ErrorRecord = new SubWindows.ErrorRecord(); ShowSubWindow(subwindow_ErrorRecord); /维修记录名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - private void ribbonButton132_Click(object sender, RoutedEventArgs e) if (subwindow_RepairRecord = null) subwindow_RepairRecord = new SubWindows.RepairRecord(); ShowSubWindow(subwindow_RepairRecord); /备份/还原数据库private void ribbonButton211_Click(object sender, RoutedEventArgs e) if (subwindow_BackupDB = null) subwindow_BackupDB = new SubWindows.BackupDB(); ShowSubWindow(subwindow_BackupDB); /系统用户private void ribbonButton221_Click(object sender, RoutedEventArgs e) if (subwindow_Users = null) subwindow_Users = new SubWindows.Users(); ShowSubWindow(subwindow_Users); /用户切换private void ribbonButton222_Click(object sender, RoutedEventArgs e) if (subwindow_UserSwitch = null) subwindow_UserSwitch = new SubWindows.UserSwitch(); ShowSubWindow(subwindow_UserSwitch); public void ShowSubWindow(UserControl userCtl) /此处可每次单击即释放一个用户控件并创建另一个用户控件if (this.LayoutRoot.Children.Count 1) this.LayoutRoot.Children.RemoveAt(1); if (userCtl != null) /从WindowMain.Tag 中检索当前管理员权限类型,并设置True和False到/用户控件 .Tag中指示当前用户是否为系统管理员userCtl.Tag = (App.isSysManager ? true : false); this.LayoutRoot.Children.Add(userCtl); Grid.SetRow(userCtl, 1); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 子窗口页面的布局基本如下(以ManagementEquipment为例),主题使用 WPF的Grid进行整体布局,第一行为一个 TextBlock,显示一个标题;第二行是一个DataGrid控件,其数据源绑定到了Grid的数据上下文中,绑定代码如下:protectedoverride void OnInitialized( EventArgs e) base .OnInitialized(e); this.grid1.DataContext = App.dbConn.GetDeviceTable(); 该函数使得 Grid的数据上下文设置为GetDeviceTable返回的表,该表即设备表。回到Grid的布局控制,第三行即一个 WPF的Expander控件,在该控件中放置了若干个按钮,按钮的布局可以使用Grid、StackPanel 或DockPanel等。在这些布局控件中,又可以继续使用其他元素放置在其中。最后一行是一个TextBlock 控件,用于显示一段帮助文本。 设备管理 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 刷新 修改 插入 删除 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - !- !- !- 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - App类代表整个工程的应用程序对象,在其中可以放置一些代码,以便整个工程都可以访问到。例如,本系统中将主窗口的对象添加为App的成员,以便所有的子窗口都可以通过App联系到主窗口:public partial classApp : Application public static WindowMain AppWndMain; 另外还放置了一个 DBConnect的类型对象作为其成员,以便任何需要访问数据的地方,都可以通过DBConnect对象访问数据库。public partial classApp : Application public static DBClass.DBConnect dbConn = new DBClass.DBConnect(Project1.Properties.Resources .globleStrConn); 目前,App中只添加了一个自定义的成员函数Submit,用于登录窗口( MainWindow )和用户切换子窗口(UserSwich)都可以执行登录代码,并设置一些关键信息(如是否是管理员)。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -