C# 三層實現對多表資料查詢
阿新 • • 發佈:2018-11-22
首先:資料庫設計--使用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