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

11 篇文章 0 订阅
5 篇文章 0 订阅

相关信息:

数据库: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;
            }
        }
    }


}

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
推荐算法(Collaborative Filtering)是一种常用的个性化推荐技术,其思想是基于历史上用户与物品之间的交互行为,通过发现用户与物品之间的共现性或相似性来预测用户对未接触过的物品的评分或兴趣。其中,用户-物品评分矩阵是推荐算法的基础,矩阵中每一行代表一个用户,每一列代表一个物品,矩阵中的值表示用户对物品的评分。推荐算法通过对这个矩阵进行分析和处理,寻找到具有预测能力的特征或规律,来实现个性化推荐。 在推荐系统中,除了推荐算法之外,还有很多其他的技术和手段,比如基于内容的推荐、基于流行度的推荐、混合推荐等。基于内容的推荐是指通过分析用户对物品的特征或属性,向用户推荐与其历史行为类似的物品;基于流行度的推荐则是指向用户推荐一些热门或流行的物品。混合推荐则是将不同的推荐技术结合起来,根据具体情况和需求,采用不同的方法进行推荐。 随着互联网的发展和普及,推荐系统已经成为了很多企业和平台的重要组成部分。比如,电商领域的推荐系统可以为用户提供个性化的商品推荐,提高用户购物体验和满意度;社交网络中的推荐系统则可以为用户推荐有价值的社交关系,增强用户粘性和活跃度;在线教育平台的推荐系统可以根据用户的学习兴趣和水平,向其推荐合适的课程和资料,提高学习效果和满意度。 虽然推荐系统带来了很多好处,但也存在一些问题和隐私风险。比如,推荐算法往往会强化用户的兴趣偏好,导致用户易陷入信息茧房,失去了一些新鲜和多样化的体验;另外,推荐系统还涉及到用户隐私的问题,需要企业和平台在推荐过程中保护用户的隐私和信息安全。因此,在推荐系统的发展和应用过程中,需要遵循科技和伦理的原则,平衡好推荐效果和用户权益的关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值