Rider c#连接mysql

用惯了clion、idea,jb家同系列的rider有点怪怪的

写窗体直接用vs,别用rider


rider和clion一样,可以在软件中直接使用数据库,这个功能可真的舒服~

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


正式连接

安装连接必备的: mysql.data.dll
在这里插入图片描述

在这里插入图片描述

ps:我其中一台电脑不晓得什么原因搜不到mysq.data,可以选择手动导入,具体过程文章最后那一部分

在工程中新建类Mysql.cs
在这里插入图片描述
按照以下步骤连接数据库

(我是执行数据库操作时才进行连接,不用时断开)

using System;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
namespace ConsoleApplication2
{
    public class Mysql
    {
    	//连接字符串
    	private static string constr = "server=127.0.0.1;port=3306;database=learndb;user=用户名;password=密码";
		
		// 无返回执行: 修改 or 插入 or 删除
		public void ExecuteNonQuery()
        {
            MySqlConnection con = new MySqlConnection(constr);
            try
            {
            	//连接数据库
                con.Open();
                //设置sql语句
                string sql="update ustudent set Sname = @name where Sid = @sid"; // 更新
                // string sql= "delete from ustudent where gid=@classId"; 删除
                // string sql= "insert into ustudent(sid, sname, ssexy) VALUE (@sid,@sname,@ssexy);插入
                MySqlCommand command = new MySqlCommand(sql, con);
                // 设置相关属性 用于替换sql中 @属性值 的部分 这里当个模板随便写写
               	command.Parameters.Add(new MySqlParameter("@sid", "0000"));
                command.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
            	// 记得关闭连接
                con.Close();
            }
        }
		
		// 有返回操作
		public List<StuInfo> Execute()
        {
            MySqlConnection con = new MySqlConnection(constr);
            MySqlDataReader dataReader = null;
            List<StuInfo> stuInfoList = null;//返回的目标
            try
            {
                // 建立连接
                con.Open();
                // 填写sql语句
                string sql = "select sid 'id', sname 'name',ssexy 'sex' from ustudent ";
                MySqlCommand command = new MySqlCommand(sql, con);
                // 替换属性值
                command.Parameters.Add(new MySqlParameter("@name", name));
                // 执行sql 得到结果集
                dataReader = command.ExecuteReader();

                //得到数据后 整理的一系列操作
                // 判断是否有数据
                if (dataReader != null && dataReader.HasRows)
                {
                    stuInfoList = new List<StuInfo>();
                    // 如果有就获取数据 每次读一行
                    while (dataReader.Read())
                    {
                        stuInfoList.Add(new StuInfo(
                            dataReader.GetString("name"), 
                            // 获取属性值
                            // 其中 字段为name的属性必须是string类型 也就是说要和数据库里的相匹配
                            dataReader.GetString("id"),
                            dataReader.GetString("sex"));
                    }
                }
                dataReader.Close();//关闭结果集
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                con.Close(); // 关闭后  dataReader里的数据就没了 所以不能直接返回dataReader 应该和引用有关
            }
            return stuInfoList;
        }
    }
}

其中 ExecuteNonQuery()因为没有提取结果集的操作,可以搞个api

/*
	外部使用方法:
	new Mysql().ExecuteNonQuery(
	//这部分是sql
                "insert into ustudent(sid, sname, ssexy) VALUE (@sid,@sname,@ssexy)",
                
    //这部分是params string[] arr,用了params 只要类型匹配,个数就不限
                "@sid", sid,
                "@sname", sname,
                "@ssexy", ssex,
            );
*/
public void ExecuteNonQuery(string sql, params string[] arr)
{
	MySqlConnection con = new MySqlConnection(constr);
	MySqlDataReader dataReader = null;
    try
    {
    	con.Open();
        MySqlCommand command = new MySqlCommand(sql, con);
        // 填充sql  传入的params必须符合格式: arr[i]=属性 arr[i+1]=属性值
        for (int i = 0; i < arr.Length; i += 2)
        {
              command.Parameters.Add(new MySqlParameter(arr[i], arr[i + 1]));
        }

		command.ExecuteNonQuery();
	}
	catch (Exception e)
	{
		Console.WriteLine(e.Message);
	}
	finally
	{
		con.Close();
	}
}

不得不说 ,c#在数据库方面写的比java舒服


在写作业的过程中遇到的问题:

1. mysql时间不匹配 (啥报错来着我忘了)
设置时区,cmd里输入:
mysql -uroot -p
set global time_zone = ‘+8:00’;

2. mysql设置时间时报错 Error 2003
mysql没有运行 手动开启

3. rider连接mysql配置相关的dll
在工程左侧 Solution 里 Dependencies 右键点 Manage NuGet Packages
搜索栏里直接搜mysql 下载相关文件

4. rider连接mysql配置相关的dll时,nuget里搜不到
mysql安装器里下载 Connection .NET
就这个东西↓
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
随便找一个下,我这里下过了所以是灰色的
然后回到工程里,在左侧 Solution 里 Dependencies 右键点 Add Reference…
点 Add Form 找到刚下载的文件的所在位置
手动导入需要用的dll

5.运行时报错 缺少using 但代码里写了using
当前 .NETFramework 的版本太低
左侧Solution project下面那个 右键最底下那个 Properties
修改 application里target framework 找到合适的版本(我直接填最高版本)

6. framework 没有较高的版本可以选择
直接去vs官网下
贴一个.NET Framework 4.8 Developer Pack Offline Installer 的链接
https://dotnet.microsoft.com/download/dotnet-framework/thank-you/net48-developer-pack-offline-installer

7. 存储mysql结果集dataReader后 先调用connection.Close()了 再返回dataReader
关的时候dataReader就没了,一直返回null

8.dataReader 得到了结果集 但是调用dataReader.Read()时返回false
查看while(dataReader.Read())内部的
看看dateReader.GetString(字段名) 有没有字段写错


其他没遇到的问题我就不晓得了

End…

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值