《C#程序设计》第四次作业:MySQL数据库及C#操作MySQL数据库

《C#程序设计》第四次作业:MySQL数据库及C#操作MySQL数据库

【目的】
1.掌握MySQL数据库的使用方法。
2.掌握C#操作MySQL数据库的方法。
3.了解C#操作其他数据库(Access,MS SQL Server等)的方法。

【目标】
目标1:MySQL数据库的基本操作,包括MySQL的安装、创建数据库、数据表、增删改查操作(80分)。
目标2:C#操作MySQL数据库,包括基本步骤和具体的编码实现(90分)。
目标3:C#编程实现MySQL数据库的多表操作(100分)。

【方法】
1. 遇到问题,想办法解决问题。有智慧=找原因+想办法。充分利用百度、Google进行搜索。
2. 先达成初步目标,再逐步深入、凝练、总结。

【作业要求】
1.MySQL数据库的基本操作,包括如下两个工作:
(1)在MySQL数据库中插入两个文件中的数据(
List_Class1.txt, List_Class1_Submit.xls,点击下载)。
(2)利用SQL命令查找所有 
出现在“List_Class1”中,未出现在“
List_Class1_Submit  的学生名单,并保存或输出(截图)。

2. C#操作MySQL数据库。
(1)连接作业1中建立的数据库中的相关的表(table),显示在DataGridView控件中。
(2)C#语言编程实现数据库的插入、删除、修改某一条或若干条记录。 

3. 多表操作。
(1)利用文件中提供的第一次作业互评成绩(
Grade_FirstExercise.xls ),创建一个Table,包括的字段为  学号、姓名、作业次数、此次作业分数 (所有字段都推荐用英文命名)。
(2) 结合1说创建的表格与互评成绩,最终得到每次作业中学生成绩的汇总。

【心得体会】
丁老师跟我说数据的噪声,对我触动比较大,以前对这方面简直可以说是0了解,通过这次作业对这方面已经有了不少的认识,由于个人水平还不到,对于数据的剔除,只能做删除工作,无法校正学生姓名方面的错误,例如 “钟籼豆”和“钟秈豆”这种错误数据,判断语句实在不知道怎么写,可能能用相似度来做?还是用某人没有成绩,而剩余数据里有相似数据,然后强行揉合在一起?这玩意得以后学学。
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

namespace MultiTableOperate
{
    class Program
    {   
        public DataTable table1 = new DataTable();
        public MySqlConnection myconn = new MySqlConnection();
        public DataSet ds = null;
        static void Main(string[] args)
        {
            Program a = new Program();
            // 实例化
            String path = "F:\\Sam\\素材\\c#\\Grade_FirstExercise.xls";
            a.ExcelToDs(path);
            // 加载Excel
            a.ConnectToMySql();
            // 连接MySql
            a.insert();
            // 插入数据
            a.updata();
            // 剔除错误数据
        }

        private void updata()
        {
            MySqlCommand udata = new MySqlCommand();
            udata.Connection = myconn;
            string sql = "create table tmp2 as select max(id) as col1 from tmp group by num;  delete from tmp where id not in(select col1 from tmp2);  drop table tmp2;";
            // 由于MySql不支持单语句同时执行同一表的select和update操作,只能新建一个相同结构、相同内容的临时表tmp2。
            // 剔除同一个人输入多个数据的错误,判断理由是,以该学生的最后一次数据更新为准。
            udata.CommandText = sql;
            udata.ExecuteNonQuery();

            sql = "create table tmp2 as select max(num) as col1 from tmp group by name;  delete from tmp where num not in(select col1 from tmp2);  drop table tmp2;";
            // 剔除多个人对同一人互评的错误数据,判断理由是,学号后面的人评论前一人,如果学号较前的人评论较后的人,视为错误数据。
            udata.CommandText = sql;
            udata.ExecuteNonQuery();

            sql = "update table1 inner join tmp set table1.mark=tmp.mark where table1.name=tmp.name;";
            // tmp表记录的学生姓名、成绩和table1表的学生姓名、学号关联起来。
            udata.CommandText = sql;
            udata.ExecuteNonQuery();

            sql = "insert into table1(name,mark) select tmp.name,tmp.mark from tmp where tmp.name not in (select table1.name from table1);";
            // 存在剩余数据,存入table1表
            udata.CommandText = sql;
            udata.ExecuteNonQuery();

            sql = "drop table tmp;";
            // 删除tmp表
            udata.CommandText = sql;
            udata.ExecuteNonQuery();

        }

        private void insert()
        {
            MySqlCommand a = new MySqlCommand();
            a.Connection = myconn;
            string sql = "delete from table1;";
            // 清空表记录
            a.CommandText = sql;
            a.ExecuteNonQuery();
            a.CommandText = "create table tmp(id int auto_increment primary key not null,name char(20),mark int,num char(20));";
            // 创建记录学生学号、成绩的临时表tmp
            a.ExecuteNonQuery();
            foreach (DataRow dr in table1.Rows)
            {
                String id = "20121167";
                String id1 = string.Copy(dr["学号"].ToString());
                id += id1.Substring(id1.Length - 4, 4);
                // 修正excel里错误的学号信息
                try
                {
                    sql = "insert into table1 values('" + id + "','" + dr["姓名"] + "','1',' ')";
                    // 往table1表插入学号和姓名信息,成绩为空,数据库已设置学号唯一,剔除重复数据。
                    a.CommandText = sql;
                    a.ExecuteNonQuery();

                }
                catch (Exception e)
                {

                }
                
                sql = "insert into tmp values(null,'" + dr["互评学生姓名"] + "','" + dr["互评学生分数"] + "','" + id + "')";
                // 往tmp表插入学生姓名、成绩、以及评论该学生的学号,学号用于剔除多个人对同一人互评的错误数据。
                a.CommandText = sql;
                a.ExecuteNonQuery();
            }            
        }

        private void ConnectToMySql()
        {
            string str = "data source=localhost;database=student;user id=root;password=\"\"";
            // 连接MySql数据库,库名为student

            myconn.ConnectionString = str;
            myconn.Open();

        }

        public DataSet ExcelToDs(string path)
        {
            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + @path + ";" + "Extended Properties=Excel 12.0;";
            // 使用OleDb驱动连接Excel
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            string strExcel = "";
            OleDbDataAdapter myCommand = null;
            strExcel = "select*from[sheet1$]";
            myCommand = new OleDbDataAdapter(strExcel, strConn);
            ds = new DataSet();
            myCommand.Fill(table1);
            return ds;
        }
    }
}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值