记录C#连接MySQL 8 遇到的坑

1.添加MySql.Data.dll
NuGet找不到包,需要添加更新源。
2.需要选择正确的MySql.Data.dll版本
mysql 8需要用对应的dll 8
3.数据连接字符串需要添加SslMode=none

string connectionStr =
            "server=localhost;uid=root;pwd=123456;database=mysql; SslMode=none;pooling=true;Charset=utf8;";
MySqlConnection msc = new MySqlConnection(connectionStr);
msc.Open();
if (msc.State.ToString() == "Open")//检测是否连接成功
{
  Console.WriteLine("连接MySQL数据库成功");
}
else
{
 Console.WriteLine("failed");
}

Bug1

System.NullReferenceException
在这里,是因为dll版本不正确引起的。

“System.NullReferenceException: 未将对象引用设置到对象的实例”问题可能原因如下:
1、ViewState 对象为Null。
2、DateSet 空。
3、sql语句或Datebase的原因导致DataReader空。
4、声明字符串变量时未赋空值就应用变量。
5、未用new初始化对象。
6、Session对象为空。
7、对控件赋文本值时,值不存在。
8、使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值。
9、使用FindControl时,控件不存在却没有做预处理。
10、重复定义造成未将对象引用设置到对象的实例错误.

Bug2

NuGet找不到包的解决办法

问题描述:在Net包中搜索不到mysql

解决办法:

1、点击右侧”设置”按钮

2、在弹出窗口中,在左侧树形结构中选择“程序包源”,再点击右上方的添加按钮

输入相关信息,点击”更新”按钮,再点击”确定”按钮

   名称:nuget.org

   源:https://www.nuget.org/api/v2/

 3、此时右侧程序包源,选择刚刚添加的nuget.org,再次搜索即可搜索成功

Bug3

问题描述

C#连接MySql时,System.Security.Authentication.AuthenticationException:调用 SSPI 失败,请参见内部异常。所用版本4.5.0

原因分析:

据查此问题因mysql数据库没有安装ssl证书导致。

解决方案:

连接字符串中加上“SslMode=none”,。

string connectStr = "server=127.0.0.1; User Id=root; password=123456; Database=studentdb;SslMode=none;Charset=utf8";

因mysql8 与mysql5.7登录验证方法不一样。所以在mysql的服务器上,到C:\ProgramData\MySQL\MySQL Server 8.0目录下,找到my.ini文件,在# The default authentication plugin to be used when connecting to the server的下面加default_authentication_plugin=mysql_native_password设置,8的验证方法是caching_sha2_password,要改成5.7的mysql_native_password。保存后,记得重启mySql8服务。

# The default authentication plugin to be used when connecting to the server
default_authentication_plugin=mysql_native_password