首先:数据库设计--使用mysql数据库。数据库名称:DBTest
数据表有4个:
//年级表(Grade):gradeid,gradename
//学生表(Student):studentno,gradeid,studentname
//科目表(Subject):subjectid,subjectname
//成绩表(StudentResult):studentno,subjectid,result,examdate
程序结果如图:
上述数据表创建好之后,接下来是程序的创建和设计。
添加一个空解决方案。
然后添加一个项目---选择类库。。。命名为Common。在这里面放一些公共的类文件。比如MysqlHellper.cs。这是自己写的。
代码如下:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data.MySqlClient;
namespace Common
{
public abstract class MysqlHellper
{
public static string connString = ConfigurationManager.ConnectionStrings["mysqlCon"].ToString();
/// <summary>
/// 返回数据集
/// </summary>
/// <param name="strSql">sql查询语句</param>
/// <returns></returns>
public static DataSet Query(string strSql)
{
using (MySqlConnection connection=new MySqlConnection(connString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
MySqlDataAdapter msda = new MySqlDataAdapter(strSql, connection);
msda.Fill(ds, "ds");
}
catch (MySqlException e)
{
throw e;
}
return ds;
}
}
}
}
然后创建Model。想要展示的实体类。
添加一个项目---选择类库。。。命名为Model。添加一个类:
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Model
{
public class StudentGradeInfo
{
public string studentname { get; set; }//学生名称
public string gradename { get; set; }//年级
public string subjectname { get; set; }//科目
public int result { get; set; }//成绩
public string examdate { get; set; }//考试时间
}
}
添加一个项目---选择类库。。。命名为DAL。数据访问层。dal层需要引用model层和Common层 --添加一个类:
代码如下:
using Common;
using Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace DAL
{
public class StudentGradeInfoDB
{
public List<StudentGradeInfo> selectResult()
{
List<StudentGradeInfo> list = new List<StudentGradeInfo>();
StringBuilder strSql = new StringBuilder();
strSql.Append("SELECT studentname,gradename,subjectname,result,examdate");
strSql.Append(" FROM Student,`Subject`,StudentResult,Grade");
strSql.Append(" WHERE Student.studentno=StudentResult.studentno AND StudentResult.subjectid=`Subject`.subjectid and Grade.gradeid=Student.gradeid");
DataSet ds = MysqlHellper.Query(strSql.ToString());
foreach (DataRow item in ds.Tables[0].Rows)
{
StudentGradeInfo info = new StudentGradeInfo();
info.studentname = item["studentname"].ToString();
info.gradename = item["gradename"].ToString();
info.subjectname = item["subjectname"].ToString();
info.result = Convert.ToInt32(item["result"]);
info.examdate = item["examdate"].ToString();
list.Add(info);
}
return list;
}
}
}
添加一个项目---选择类库。。。命名为BLL。业务访问层。bll层需要引用model层和Dal层 --添加一个类:
using DAL;
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BLL
{
public class StudentGradeInfoBL
{
StudentGradeInfoDB db = new StudentGradeInfoDB();
public List<StudentGradeInfo> selectResult()
{
return db.selectResult();
}
}
}
这些都建立完成之后,就需要UI界面层了。添加一个窗体程序。这个需要引用bll层和model层。
代码如下:
using BLL;
using Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
namespace UI
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
private void btnSelect_Click(object sender, EventArgs e)
{
StudentGradeInfoBL bl = new StudentGradeInfoBL();
List<StudentGradeInfo> list = bl.selectResult();
dgvStudent.DataSource = list;
}
}
}
在ui层下面添加配置文件app.config:配置连接数据库字符串
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="mysqlCon" connectionString="Server=数据库ip地址; uid=用户名; pwd=密码;Database=DBTest;CharSet=utf8;port=3306"/>
</connectionStrings>
</configuration>
至此,简单的小项目就完成了。多层互不干扰,扩展性很高。
对于新手来说,主要难点在多表查询和多层关系的逻辑。多想多练就ok