1. 程式人生 > >C# 三層實現對多表資料查詢

C# 三層實現對多表資料查詢

首先:資料庫設計--使用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