《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说创建的表格与互评成绩,最终得到每次作业中学生成绩的汇总。
【心得体会】
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;
}
}
}