前言
最近见习,要完成的一个作业。主要是WinForm(C#)开发,本想参考网上的Demo,但一直没找到合适入门的,因此打算自己记录一下整个开发过程,给予队友和后面学习的人一些方便。
当然,我也是第一次学习WinForm,技术不够成熟,代码也可能不够优化,希望大神多指教。
代码会开源在GitHub:https://github.com/YEN-GitHub/MES_SimpleDemo,可随时fork/download,我会尽量注释完善,一起共勉。
开发环境
本系列都是一下开发环境,后面的文章不在重复。
系统:Windows 10 家庭版
IDE:Visual studio 2015 Enterprise
数据库:SQL SERVER 2012
GitHub Desktop:3.3.4.0
登录页面前台页面
登录页面后台验证
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MES_SimpleDemo
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}
/**登录验证*/
private void button1_Click(object sender, EventArgs e)
{
//获取文本框中的值
string username = this.textBox1.Text;
string password = this.textBox2.Text;
if(username.Equals("") || password.Equals(""))//用户名或密码为空
{
MessageBox.Show("用户名或密码不能为空");
}
else//用户名或密码不为空
{
//到数据库中验证
string selectSql = "select * from tb_user where username='"+username+"' and password='"+password+"'";
SqlHelp sqlHelper = new SqlHelp();
int count = sqlHelper.SqlServerRecordCount(selectSql);//返回符合的结果数量
if (count > 0)//如果信息>0则说明匹配成功
{
MessageBox.Show("信息验证成功");
//将当前登录日志信息写入数据库(待开发...)
//跳转到主页面
Main view = new Main();//创建一个新页面
view.Show();//显示新页面
this.Hide();//隐藏当前页面
}
else
{
MessageBox.Show("用户名或密码错误");
}
}
}
/**输入框重置*/
private void button2_Click(object sender, EventArgs e)
{
this.textBox1.Text = "";
this.textBox2.Text = "";
}
}
}
成功页面
数据库连接核心代码
using System;
using System.Data;
using System.Configuration;
using System.Text.RegularExpressions;
using System.Data.SqlClient;
using System.IO;
using System.Net.Mail;
using System.Text;
/// <summary>
///主要包括sqlHelp数据库访问助手类 和常用的一些函数定义
///</summary>
///SqlHelp数据库访问助手
///1.public static void OpenConn() //打开数据库连接
///2.public static void CloseConn() //关闭数据库连接
///3.public static SqlDataReader getDataReaderValue(string sql) //读取数据
///4.public DataSet GetDataSetValue(string sql, string tableName) //返回DataSet
///5.public DataView GetDataViewValue(string sql) //返回DataView
///6.public DataTable GetDataTableValue(string sql) //返回DataTable
///7.public void ExecuteNonQuery(string sql) //执行一个SQL操作:添加、删除、更新操作
///8.public int ExecuteNonQueryCount(string sql) //执行一个SQL操作:添加、删除、更新操作,返回受影响的行
///9.public static object ExecuteScalar(string sql) //执行一条返回第一条记录第一列的SqlCommand命令
///10.public int SqlServerRecordCount(string sql) //返回记录数
///常用函数
///1.public static bool IsNumber(string a) //判断是否为数字
///2.public static string GetSafeValue(string value) //过滤非法字符
namespace MES_SimpleDemo
{
class SqlHelp
{
///私有属性:数据库连接字符串
///Data Source=(Local) 服务器地址
///Initial Catalog=SimpleMESDB 数据库名称
///User ID=sa 数据库用户名
///Password=admin123456 数据库密码
private const string connectionString = "Data Source=(Local);Pooling=False;Max Pool Size = 1024;Initial Catalog=SimpleMESDB;Persist Security Info=True;User ID=sa;Password=admin123456";
/// <summary>
/// sqlHelp 的摘要说明:数据库访问助手类
/// sqlHelper是从DAAB中提出的一个类,在这里进行了简化,DAAB是微软Enterprise Library的一部分,该库包含了大量大型应用程序
/// 开发需要使用的库类。
/// </summary>
public SqlHelp()
{
//无参构造函数
}
public static SqlConnection conn;
//打开数据库连接
public static void OpenConn()
{
string SqlCon = connectionString;//数据库连接字符串
conn = new SqlConnection(SqlCon);
if (conn.State.ToString().ToLower() == "open")
{
}
else
{
conn.Open();
}
}
//关闭数据库连接
public static void CloseConn()
{
if (conn.State.ToString().ToLower() == "open")
{
//连接打开时
conn.Close();
conn.Dispose();
}
}
// 读取数据
public static SqlDataReader GetDataReaderValue(string sql)
{
OpenConn();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
CloseConn();
return dr;
}
// 返回DataSet
public DataSet GetDataSetValue(string sql, string tableName)
{
OpenConn();
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter(sql, conn);
da.Fill(ds, tableName);
CloseConn();
return ds;
}
// 返回DataView
public DataView GetDataViewValue(string sql)
{
OpenConn();
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter(sql, conn);
da.Fill(ds, "temp");
CloseConn();
return ds.Tables[0].DefaultView;
}
// 返回DataTable
public DataTable GetDataTableValue(string sql)
{
OpenConn();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(dt);
CloseConn();
return dt;
}
// 执行一个SQL操作:添加、删除、更新操作
public void ExecuteNonQuery(string sql)
{
OpenConn();
SqlCommand cmd;
cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
cmd.Dispose();
CloseConn();
}
// 执行一个SQL操作:添加、删除、更新操作,返回受影响的行
public int ExecuteNonQueryCount(string sql)
{
OpenConn();
SqlCommand cmd;
cmd = new SqlCommand(sql, conn);
int value = cmd.ExecuteNonQuery();
return value;
}
//执行一条返回第一条记录第一列的SqlCommand命令
public object ExecuteScalar(string sql)
{
OpenConn();
SqlCommand cmd;
cmd = new SqlCommand(sql, conn);
object value = cmd.ExecuteScalar();
return value;
}
// 返回记录数
public int SqlServerRecordCount(string sql)
{
OpenConn();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = sql;
cmd.Connection = conn;
SqlDataReader dr;
dr = cmd.ExecuteReader();
int RecordCount = 0;
while (dr.Read())
{
RecordCount = RecordCount + 1;
}
CloseConn();
return RecordCount;
}
///<summary>
///一些常用的函数
///</summary>
//判断是否为数字
public static bool IsNumber(string a)
{
if (string.IsNullOrEmpty(a))
return false;
foreach (char c in a)
{
if (!char.IsDigit(c))
return false;
}
return true;
}
// 过滤非法字符
public static string GetSafeValue(string value)
{
if (string.IsNullOrEmpty(value))
return string.Empty;
value = Regex.Replace(value, @";", string.Empty);
value = Regex.Replace(value, @"'", string.Empty);
value = Regex.Replace(value, @"&", string.Empty);
value = Regex.Replace(value, @"%20", string.Empty);
value = Regex.Replace(value, @"--", string.Empty);
value = Regex.Replace(value, @"==", string.Empty);
value = Regex.Replace(value, @"<", string.Empty);
value = Regex.Replace(value, @">", string.Empty);
value = Regex.Replace(value, @"%", string.Empty);
return value;
}
}
}
数据库表结构及记录
登录测试
成功
失败
今天就先简单的登录页面,其实连上了数据库,之后的就跟Web开发一样的思想,后面将会更新更多功能。