创建简易数据库:C#+MySQL无理论全实操

0.写前叨叨

    距离完成项目已经快两个月了,惊觉自学的数据库内容已经忘了差不多,这才赶紧写这才想起来要写写操作了,方便以后温习!

1.MySQL

   首先,学习一门语言先要知道它是什么,有什么用,简单介绍介绍MySQL

1.1 MySQL简介

   MySQL是一个关系型数据库管理系统,是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
   MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。其特点是体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

   总而言之,可以理解为使用MySQL可以写出一个简陋版的Excel,但是这个“Excel”的可编程性更强,而且能够和同一个局域网内的用户交流,编辑、修改、保存同一个数据库表格。

1.2 MySQL下载

   下载也比较简单,进入下载网址,选择自己想要的版本,下载图片中红色框选的Installer
下载好之后看这个哔哩哔哩中的学习、下载教程,很快就能学会的,里面的老师讲的还挺详细的。

在这里插入图片描述


1.3 DataGrip下载与使用

   虽然MySQL下载好了,但是你很快就会发现MySQL的编译器非常原始,参考python的IDEA。DataGrip的用途类似Pycharm,也是一个编译器,使用起来很方便,有些地方甚至能自己生成代码,同样在这个学习、下载教程
   所以说Jetbrains公司YYDS!

1.4 DataGrip中遇到的问题

   1.要先下载并且安装好MySQL,才能和DataGrip连接。年少无知的时候MySQL都没装好就用DataGrip,这个顺序是不对的。

   2.根据指示创建用户root与密码,确定serve主机localhost。创建无误之后与MySQL驱动通信,测试时遇到无法连接的问题。需要提前下载安装好MySQL Community,发生错误是因为没有安装社区,安装后还需要再URL后加上时区,否则也会报错。输入的URL为:
                               jdbc:mysql://localhost:3306?serverTimezone=UTC

在这里插入图片描述



2.数据库编写

   使用C#和MySQL联合编写一个数据库,其功能包括增删查改等,以下将一一展示代码。原本想将所有资料开源,但是数据库集成到一个大的project里面了(含其他同学劳动成果),不好分割出来,所以大家一个个看、一个个学吧。

   界面设计如下,只是一个简易数据库,大佬轻喷!

在这里插入图片描述


   DataGrip中的表格设计包含两个表,一个是diary记录芯片数据,另一个是testy记录操作日志。两个表格的id相互关联,testy中的id是自增模式,而diary中的id序号是读取testy中的id生成的(一样的)。所以可以知道某一次的操作的对应芯片数据,方便查询

在这里插入图片描述


2.1 MySQL与C#连接

   在工具箱→NuGet包管理器→管理解决方案的NuGet程序包下载以下安装包。

在这里插入图片描述


   先对public class中加入以下代码:

        private MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();
        private MySqlConnection connection;

   我这里的设置是点击按钮,完成连接,所以要自己先创建一个事件,事件中的代码如下:

        private void Connetc_database_Click(object sender, EventArgs e)
        {
            builder.UserID = "root";//root chip
            builder.Password = "请输入你的密码";//
            builder.Server = "localhost";// localhost
            builder.Database = "请输入你要进入的数据库名称";
            builder.AllowUserVariables = true;
            connection = new MySqlConnection(builder.ConnectionString);

            try
            {
                //打开数据库连接
                connection.Open();
                MessageBox.Show("数据库已经连接了!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

   最终效果:

在这里插入图片描述


2.2 增

   增加的功能是手动增加操作员、设备状态、操作时间、芯片数量等。并且在按下按钮“一键写入”才完成。
   ⭐代码中的数据库信息要和你在DataGrip中创建的一致才行,不然会报错!
   由于每个人要输入记录的东西都不一样,这里只展现核心代码,会用就不成问题。

        private void One_click_input_basic_info_Click(object sender, EventArgs e)
        {
            //将时间转化为string格式,方便保存;
            time.Text = DateTime.Now.ToString("yyyy-MM-dd HH:MM:ss");
            //以下是写入的核心关键,当时就是因为不知道特定语法卡了很久;记得一定要与DataGrip表格中字段对应!
            string sql = String.Format("insert into testy (operator,machineid,status,chip_number,rate,time)values('{0}','{1}','{2}','{3}','{4}','{5}');", operater.Text, machineid.Text, status.Text, chipnum.Text,rate.Text,time.Text);
            MySqlDataAdapter mda = new MySqlDataAdapter(sql, connection);
            DataSet ds = new DataSet();
            mda.Fill(ds, "student");
            dataGridView1.DataSource = ds.Tables["help"];
            connection.Close();
            
        }

   还有一个显示表格的操作,很简单的,先需要创建dataGridView,然后加入以下代码,把testy这个表格在dataGridView中显示出来

        private void Show_table1_Click_1(object sender, EventArgs e)
        {
            string sql = "select * from testy";
            //string sql = "select max(id) from testy";
            MySqlDataAdapter mda = new MySqlDataAdapter(sql, connection);
            DataSet ds = new DataSet();
            mda.Fill(ds, "worldlocationx");
            //显示数据
            dataGridView2.DataSource = ds.Tables["worldlocationx"];
            connection.Close();
        }

   最终展示效果:

在这里插入图片描述



2.3 删

   一定要先阅读代码,以下代码化为己用只需要改一些参数就行啦!
   下面删除的是选定dataGridView1的某一行(这里同步删除多行也行),删除的是表格diary内的数据。

 private void delete_location_info_Click(object sender, EventArgs e)
        {
            //定义计数值
            int count = 0;
            try
            {
                //连接数据库,我这里连接数据库的方法是自己写的,方法因人而异
                connection.Open();
                //connectMySQL();
                //for循环,dataGridView1.SelectedRows.Count为鼠标选中行的数目,一次for循环删除一行数据
                for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
                {
                    //获得i行的编号
                    int xpos = Convert.ToInt32(dataGridView1.SelectedRows[i].Cells[2].Value);
                    //编写数据库删除代码,这里还用到了动态变量,用于改变每次id值
                    string dataToDo3 = $"delete from diary where xpos = {xpos}";
                    //创建MySqlCommand类用于SQL语句的执行
                    MySqlCommand cmd = new MySqlCommand(dataToDo3, connection);
                    //定义x接收返回值SQL语句返回值,为0则为执行失败
                    int x = cmd.ExecuteNonQuery();
                    //执行判断
                    if (x == 0)
                    {
                        MessageBox.Show("删除失败");
                    }
                    //若成功则计数值+1
                    count = count + 1;
                }
                //若计数值等于选中行的数目,代表成功完成所有行的删除
                if (count == dataGridView1.SelectedRows.Count)
                {
                    MessageBox.Show("删除成功");
                }

            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.ToString());
            }
            finally
            {

                connection.Close();
            }

        }

2.4 改

   改的功能是设置成能够直接在dataGridView中更改,所以需要创建一个事件dataGridView_CellBeginEdit

在这里插入图片描述


   在事件中的代码如下:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {

            int id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
            int chipid = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString());
            int xpos = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString());
            int ypos = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString());       
            
            string sql = String.Format("insert into diary (id,chipid,xpos,ypos)values('{0}','{1}','{2}','{3}');", id,chipid,xpos,ypos);
            MySqlDataAdapter mda = new MySqlDataAdapter(sql, connection);
            DataSet ds = new DataSet();
            mda.Fill(ds, "student");
            dataGridView1.DataSource = ds.Tables["help"];
            connection.Close();

        }

2.5 查

   查询功能是使用comboBox按键,查询表的特殊字段。在public Form中加入comboBox的声明代码:

        public Form3()
        {
            InitializeComponent();
            comboBox1.Items.AddRange(new string[] { "id", "chip_number", "rate", "time", "operator", "status", "machineID" });
            comboBox2.Items.AddRange(new string[] { "id", "chipid", "xpos", "ypos" });
        }

   在查询按钮事件中写入代码:

        private void search_record_Click(object sender, EventArgs e)
        {
            string sql = String.Format("select * from testy where {0} ='{1}';", comboBox1.Text, textBox5.Text);
            Console.WriteLine(sql);

            MySqlDataAdapter mda = new MySqlDataAdapter(sql, connection);
            DataSet ds = new DataSet();
            mda.Fill(ds, "worldlocationx");
            //显示数据
            dataGridView2.DataSource = ds.Tables["worldlocationx"];
            connection.Close();
        }

2.6 导出为Excel

   需要在NuGet中下载一个GemBox.Spreadsheet方案包,然后正确引用using GemBox.Spreadsheet;输入以下代码即可导出显示在dataGridView2中的表格。

 private void export_basic_info(object sender, EventArgs e)
        {
            SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
            ExcelFile excelFile = new ExcelFile();
            ExcelWorksheet sheet = excelFile.Worksheets.Add("Test");

            int columns = dataGridView2.Columns.Count;
            int rows = dataGridView2.Rows.Count;

            for (int j = 0; j < columns; j++)
            {
                sheet.Cells[0, j].Value = dataGridView2.Columns[j].HeaderText;
            }
            for (int i = 1; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    sheet.Cells[i, j].Value = dataGridView2[j, i - 1].Value.ToString().Trim();
                }
            }
            excelFile.SaveXls("你想保存到的位置");
            MessageBox.Show("生成成功");
        }

2.7 局域网下共享 MySQL 数据库连接

   很多时候是多个管理者共同管理一个database,所以需要“联网”设置,大家直接参考这个方法就好了,也不难!

3.总结

    ⭐说难不难,从入门到上手用时不长。本篇目涉及的知识都是偏简单的,还需要深入学习,希望对大家有帮助!

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340