入口文件中,先显示登录页,登录成功后进入主页
namespace StudentManager
{
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// 创建登录窗体
FrmUserLogin objUserLogin = new FrmUserLogin();
DialogResult result = objUserLogin.ShowDialog();
if (result == DialogResult.OK)
{
Application.Run(new FrmMain());
}
else {
Application.Exit();
}
Application.Run(new FrmMain());
}
// 声明用户信息的全局变量
public static SysAdmin currentAdmin = null;
}
}
数据访问类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration; // 需要添加引用
namespace DAL
{
/// <summary>
/// 通用数据访问类
/// </summary>
class SQLHelper
{
// ConfigurationManager
private static readonly string connString = ConfigurationManager.ConnectionStrings["connString"].ToString();
/// <summary>
/// 执行增删改查
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static int Update(string sql) {
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
int result = cmd.ExecuteNonQuery();
return result;
}
catch (Exception ex)
{
throw ex;
}
finally {
conn.Close();
}
}
/// <summary>
/// 执行单一结果查询
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static object GetSingleResult(string sql) {
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
object result = cmd.ExecuteScalar();
return result;
}
catch (Exception ex)
{
throw ex;
}
finally {
conn.Close ();
}
}
/// <summary>
/// 执行多结果查询
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static SqlDataReader GetReader(string sql) {
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
SqlDataReader objReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return objReader;
}
catch (Exception ex) {
conn.Close();
throw ex;
}
}
/// <summary>
/// 执行返回数据集的查询
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static DataSet GetDataSet(string sql) {
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd); // 创建数据适配
DataSet ds = new DataSet(); // 创建一个内存数据集
try
{
conn.Open();
da.Fill(ds); // 使用数据适配器填充数据集
return ds;
}
catch (Exception ex)
{
throw ex;
}
finally {
conn.Close () ;
}
}
/// <summary>
/// 启用事务执行多条sql语句
/// </summary>
/// <param name="sqlList">sql语句列表</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static bool UpdateByTran(List<string> sqlList) {
SqlConnection conn = new SqlConnection (connString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
try
{
conn.Open();
cmd.Transaction = conn.BeginTransaction(); // 开启事务
foreach (string itemSql in sqlList)
{ // 循环提交sql语句
cmd.CommandText = itemSql;
cmd.ExecuteNonQuery();
}
cmd.Transaction.Commit();
return true;
}
catch (Exception ex)
{
if (cmd.Transaction != null)
{
cmd.Transaction.Rollback();// 回滚事务
}
throw new Exception("调用事务方法UpdateByTran(List<string> sqlList)时出现错误");
}
finally {
if (cmd.Transaction != null)
cmd.Transaction = null;
conn.Close ();
}
}
/// <summary>
/// 获取服务器的时候
/// </summary>
/// <returns></returns>
public static DateTime GetServiceTime() {
return Convert.ToDateTime(GetSingleResult("select getdate()"));
}
}
}
登录逻辑
private void btnLogin_Click(object sender, EventArgs e)
{
// 1.数据验证
if (this.txtLoginId.Text.Trim().Length == 0) {
MessageBox.Show("请输入登录账号!", "提示信息");
this.txtLoginId.Focus();
return;
}
if (this.txLoginPwd.Text.Trim().Length == 0) {
MessageBox.Show("请输入登录密码!", "提示信息");
this.txLoginPwd.Focus();
return ;
}
// 2.封装用户信息对象
SysAdmin sysAdmin = new SysAdmin()
{
LoginId = Convert.ToInt32(this.txtLoginId.Text.Trim()),
LoginPwd = this.txLoginPwd.Text.Trim(),
};
// 3调用后台登录方法
try
{
// 全局保存数据
Program.currentAdmin = new AdminService().AdminLogin(sysAdmin);
if (Program.currentAdmin != null)
{
this.DialogResult = DialogResult.OK;
}
else
{
MessageBox.Show("用户名或密码错误!", "提示信息");
}
}
catch (Exception ex) {
MessageBox.Show(ex.Message, "操作异常");
}
}
这里要重点记住“全局变量” 在入口文件
在主页设置两个比例页面
弹出写法
添加学员笔记
页面布局
学员管理
窗口传值
// 显示修改学员信息窗口 窗口之间的传值
FrmEditStudent objEditStudent = new FrmEditStudent(objStudent);
objEditStudent.ShowDialog();