【c#】使用控制台方式建立一个简单Mysql数据库,实现增删查改

相关信息:

数据库:mysql、MySQLworkbench

IDE:VS

数据库内容:一张表(mk_sqltest),里面有四个列:

  • id(主键/非空/唯一/自增):int
  • name:varchar
  • sex:varchar
  • grade:varchar

功能:增删查改

结构:两个cs文件,一个为具有输入和取出功能的sql_help辅助功能类,一个为主进程页面

详细要点:

1、相对于sql serve,mysql在使用时,ADO.NET五大对象:Connection、Command、DataReader、DataSet、DataAdapter以及一个参数SqlParameter都要有变化,最具体的就是加上“My”的前缀。另外sql server中SqlParameter用到的参数是[@a],而在mysql是[?a],即@->?。

2、在用c#操作mysql时,要先下载一个MySQL Connector/Net,类似的,在用java来控制时要用到MySQL Connector/J,下载后将MySQL Connector/Net打开运行,在当前项目里的解决方案资源管理器中,右键新建一个引用,引用对象为你方才安装的地址(默认一般为:C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.5.2的MySql.Data.dll文件。然后再using中添加一句using MySql.Data.MySqlClient;

3、通过服务器资源管理器建立的连接字符串,会缺少password,需要手动在字符串中添加。

另外找到了一个对连接字符串很有研究的网页,没有细看,贴出来,也许日后有用

4、当数据库中涉及到了具有自动增长(AI)的属性时,或者某个列不想让用户输入时,或者想要某个没有设置非空的列空着时:

insert into userInfo values(1,'aaa','1212');//第一个参数为自动增长参数

当数据表中有自增长主键时,当用SQL插入语句中插入语句带有ID列值记录的时候; 

  1. 如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值;
  2. 也可以不指定该列的值,只将其他列的值插入,让ID还是按照MySQL自增自己填; 
  • 这种情况在进行插入的时候,两种解决方法: 
  • ①可以把id的值设置为null或者0,这样子mysql都会自己做处理 
  • ②手动指定需要插入的列,不插入这一个字段的数据!
     
#方法①:
insert into userInfo values(null,'ddf','8979');
insert into userInfo values(0,'ddf','8979');
#方法②:
insert into userInfo(name,password) values('ddf','8979');

同理,如果你建立了某个方法,方法里使用了SqlParameter,有多个参数,但你现在调用这个方法不需要这么多参数,你可以直接把不需要的参数位传入null(数字似乎是0?)

5、console.readkey()的值问题

这个问题其实和本篇没啥关系,正巧用到,也记一记。

c#中readkey,输入a,得到的是A,输入8得到的是D8。

实际上,readkey得到的是键盘代码。键盘代码是一个枚举,比如说,D8代表数字区的8,A表示字母区的A(a)。
使用unity开发获得键盘输入也是这个道理。

6、退出控制台命令……

Environment.Exit(0); //0代表正常退出,非0代表某种错误的退出

7、控制台,返回上级菜单……

简单的goto命令即可……

在同一个方法内,

aaaa:
    xxxxx
    xxxxx
    xxxxx
    goto aaaa;

8、转义字符……

这里仅仅记录@的简单用法,详细内容以及其他转义字符用法:点到这里

C#中转义字符分2中,一种是\,一种是@。

@符号在C#中有两个作用
作用1、在字符串的前面加@表示取消字符串中的转义
例如 string path=@"d:\root\subdir";
作用2、如果用户定义的对象名和系统关键字冲突,可以在变量前面加入@
例如 string @Class="this is a test";

转义字符    字符名称    

\'    单引号    

\"    双引号    

\\    反斜杠    

\0    空字符    

\a    警报符    

\b    退格    

\f    换页    

\n    换行    

\r    回车    

\t    水平制表    

\v    垂直制表  

9、还是关于传参数和SqlParameter有关的:

string str="这里是sql语句,涉及到的参数为【?name】的形式,无引号"
MySqlParameter[] para =
                {
                    new MySqlParameter("?name", MySqlDbType.VarChar),
                    new MySqlParameter("?sex", MySqlDbType.VarChar),
                    new MySqlParameter("?grade", MySqlDbType.Int16)
                };
            para[0].Value = name;
            para[1].Value = sex;
            para[2].Value = grade;
            cmd.Parameters.Add(para[0]);
            cmd.Parameters.Add(para[1]);
            cmd.Parameters.Add(para[2]);

10、几个很好的博客,包括DataReader和DataSet的用法等。

这些文章未来自己会慢慢做个总结

ADO.NET操作MySQL数据库

  • ADO.NET包括五大对象,分别是Connection、Command、DataReader、DataSet、DataAdapter,使用ADO.NET访问数据库有两个步骤:建立数据库连接、读取或更新数据。读取数据主要有两种方法:Command与DataReader、DataAdapter与DataSet。
  • (1)Command和DataReader对象读取数据
  • (2)DataSet和DataAdapter对象读取数据
  • (1)command对象更新数据
  • (2)DataAdapter对象更新数据
  • 总结:

    1.DataReader对象读取数据库中数据只能一条条读取,并且是只读的,不可以修改;DataSet与DataAdapter对象读取的数据可以读取且可以修改,DataSet中可以存放很多表。

    2.DataReader读取数据前需要手动写代码连接数据库,即conn.open(),查询完毕后需要手动写代码关闭数据库连接;DataSet与DataAdapter对象读取数据前不需要手动写代码连接数据库,会自动识别,若数据库连接没开,则开启,如果没有关闭,则自动关闭。

c# 连接Mysql数据库

  • 几个常用函数,未来整理。

MySqlDataReader

  • 本文讲述如何从SqlDataReader或MySqlDataReader中循环读取内容并输出
  • sqlserver和mysql的DataReader的用法完全一样,只是名字不同,以mysql为例

mysql 使用DataReader 读数据

DataSet用法详细 转

  • 一、特点介绍

    1、处理脱机数据,在多层应用程序中很有用。

    2、可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法。

    3、处理分级数据

    4、缓存更改

    5、XML的完整性:DataSet对象和XML文档几乎是可互换的。

  • 极为详细的内容介绍

 

——————————————————————————————————————————————

源代码:

sql_help辅助功能类:

using MySql.Data.MySqlClient;
using System.Data;

namespace sql_test01
{
    class sql_help
    {
        //该方法主要功能:提供字符串和三个参数后进行数据库的写入操作
        static string ConnectionString = @"persistsecurityinfo=True;server=127.0.0.1;user id=root;Password=tr2719031;database=no9";
        MySqlConnection conn = new MySqlConnection(ConnectionString);
        public void sql_offer(string str, string name, string sex, int grade)
        {
            conn.Open();
            MySqlCommand cmd = new MySqlCommand();
            //这句不用cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = conn;
            string cmd_add = str;
            //方法一
            MySqlParameter[] para =
                {
                    new MySqlParameter("?name", MySqlDbType.VarChar),
                    new MySqlParameter("?sex", MySqlDbType.VarChar),
                    new MySqlParameter("?grade", MySqlDbType.Int16)
                };
            para[0].Value = name;
            para[1].Value = sex;
            para[2].Value = grade;
            cmd.Parameters.Add(para[0]);
            cmd.Parameters.Add(para[1]);
            cmd.Parameters.Add(para[2]);
            //方法二
            //cmd.Parameters.AddWithValue("?name",name);
            //cmd.Parameters.AddWithValue("?sex",sex);
            //cmd.Parameters.AddWithValue("?grade", grade);
            cmd.CommandText = cmd_add;
            //构建一个适配器 对象
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            //构建内存中的数据集对象
            DataSet ds = new DataSet();
            //da.Fill(ds);

            MySqlDataReader sdr = cmd.ExecuteReader();
            cmd.Parameters.Clear();
            sdr.Close();
            conn.Close();
        }

        //该方法主要功能:提供字符串后进行数据库读取操作
        public string sql_back(string str)
        {
            conn.Open();
            MySqlCommand cmd = new MySqlCommand();
            //这句不用cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = conn;
            string cmd_add = str;
            cmd.CommandText = cmd_add;
            //构建一个适配器 对象
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            //构建内存中的数据集对象
            DataSet ds = new DataSet();
            //da.Fill(ds);
            MySqlDataReader sdr = cmd.ExecuteReader();
            string back = null;
            while (sdr.Read())
            {
                back += "序号:"
                    + sdr[0].ToString() + "\t"
                    + "姓名:"
                    + sdr[1].ToString() + "\t"
                    + "性别:"
                    + sdr[2].ToString() + "\t"
                    + "年级:"
                    + sdr[3].ToString() + "\t"
                    + "\n"
                    ;
            }
            cmd.Parameters.Clear();
            sdr.Close();
            conn.Close();
            return back;
        }
    }
}

主进程:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//本练习主要为对数据库的增删改查
//实验对象是mysql
namespace sql_test01
{
    class Program
    {
        //数据库表的信息为:序号、姓名、性别、年级
        static void sql_add()
        {Console.WriteLine("这里是增加功能");
            Console.WriteLine("请输入姓名(name:string)、性别(sex:string)、年级(grade:int)");
            String name, sex;
            int grade;
            name = Console.ReadLine();
            sex = Console.ReadLine();
            grade = Convert.ToInt16(Console.ReadLine());
            sql_help sql_Help = new sql_help();
            string str = "insert into mk_sqltest values(null,?name,?sex,?grade)";
            sql_Help.sql_offer(str, name, sex, grade);
            Console.WriteLine("操作成功!返回主菜单……");
            Console.WriteLine("如果想要退出,请按数字 1 !");
            string Key = Console.ReadKey().Key.ToString();
            if (Key == "D1")
            {
                Environment.Exit(0);
            }
            Console.ReadLine();
        }
        static void sql_reduce()
        {
            Console.WriteLine("这里是删除功能");
            Console.WriteLine("以下为当前数据库所有数据:");
            string str = "select * from mk_sqltest";
            sql_help sql_Help = new sql_help();
            string back = sql_Help.sql_back(str);
            Console.WriteLine(back);
            Console.WriteLine("请输入您要删除的记录 序号:");
            int n = Convert.ToInt32(Console.ReadLine());
            str = "delete from mk_sqltest where id='" + n + "'";
            sql_Help.sql_offer(str, null, null, 0);

            Console.WriteLine("操作成功!返回主菜单……");
            Console.WriteLine("如果想要退出,请按数字 1 !");
            string Key = Console.ReadKey().Key.ToString();
            if (Key == "D1")
            {
                Environment.Exit(0);
            }
            Console.ReadLine();
        }
        static void sql_modify()
        {
            Console.WriteLine("这里是修改功能");
            Console.WriteLine("以下为当前数据库所有数据:");
            string str = "select * from mk_sqltest";
            sql_help sql_Help = new sql_help();
            string back = sql_Help.sql_back(str);
            Console.WriteLine(back);
            Console.WriteLine("请输入您要修改的记录 序号:");
            int n = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("请输入您要修改的记录的信息:姓名(name:string)、性别(sex:string)、年级(grade:int)");
            String name, sex;
            int grade;
            name = Console.ReadLine();
            sex = Console.ReadLine();
            grade = Convert.ToInt16(Console.ReadLine());
            str = "UPDATE mk_sqltest SET name = ?name , sex=?sex , grade=?grade WHERE id = '" + n + "'";
            //sql_Help.sql_offer(str, n, name, sex, grade);
            sql_Help.sql_offer(str, name, sex, grade);

            Console.WriteLine("操作成功!返回主菜单……");
            Console.WriteLine("如果想要退出,请按数字 1 !");
            string Key = Console.ReadKey().Key.ToString();
            if (Key == "D1")
            {
                Environment.Exit(0);
            }
            Console.ReadLine();
        }
        static void sql_query()
        {

            Console.WriteLine("这里是查询功能");
            Console.WriteLine("请分别输入查询的列名(id/name/sex/grade)和值");
            string column = Console.ReadLine();
            string value = Console.ReadLine();
            string str = "select * from mk_sqltest where " + column + "='" + value + "'";
            sql_help sql_Help = new sql_help();
            string back = sql_Help.sql_back(str);
            Console.WriteLine(back);
            if (back == null)
            {
                Console.WriteLine("查询失败!请检查您的输入数据!功能重启!" + "\n");
                sql_query();
            }
            else
            {
                Console.WriteLine("操作成功!返回主菜单……");
                Console.WriteLine("如果想要退出,请按数字 1 !");
                string Key = Console.ReadKey().Key.ToString();
                if (Key == "D1")
                {
                    Environment.Exit(0);
                }
            }
            Console.ReadLine();
        }

        static void Main(string[] args)
        {
            start:
            Console.WriteLine("数据库测试:请输入数字选择您想要使用的功能:");
            Console.WriteLine("1、在数据库中增加条目");
            Console.WriteLine("2、在数据库中删除条目");
            Console.WriteLine("3、在数据库中修改条目");
            Console.WriteLine("4、在数据库中查询条目");
            int message = Convert.ToInt16(Console.ReadLine());
            switch (message)
            {
                case 1:
                    sql_add();
                    goto start;
                    break;
                case 2:
                    sql_reduce();
                    goto start;
                    break;
                case 3:
                    sql_modify();
                    goto start;
                    break;
                case 4:
                    sql_query();
                    goto start;
                    break;
                default:
                    break;
            }
        }
    }


}

 

 

 

你可能感兴趣的:(c#,c#.net,sql相关,待更新)