C# CSharp .NET 使用 MySql 详解/在Visual Studio 中访问MySql数据库的方法
一、前提条件
- .NET 下载+VS2019 community + c#环境已经配置好;
- 本blog是想自定义MySql的安装路径,如果c盘容量还挺大,可以按照MySql 官网给的说明,在官网下载.msi的安装程序,然后选择自定义安装,然后选择 Connector NET 8.0即可;这样的话,可以略过本blog的二和三;
二、MySql 自定义路径的安装
使用.NET connector好像需要 MySql 的版本比较新,版本要求参考 这里
由于我原来安装的是5.5,所以后来又重新安了一次,发现下载的.msi不可以更改安装路径,在这个博主这里找到了 自定义路径安装的方法:
-
在MySql官网下载 MySql的.ZIP的压缩文件(ZIP Archive);
-
解压缩到你想安装的位置;如将其放在
D:\Program Files\MySQL\mysql-8.0.25-winx64 -
在
D:\Program Files\MySQL\下新建mysqlData文件夹,用来保存数据存放的位置 -
在上述路径下新建
my.ini的配置文件,其内容如下:[mysqld] # 设置3306端口 port=3306 # 自定义设置mysql的安装目录,即解压mysql压缩包的目录 basedir=D:\Program Files\MySQL\mysql-8.0.25-winx64 # 自定义设置mysql数据库的数据存放目录 datadir=D:\Program Files\MySQL\mysqlData # 允许最大连接数 max_connections=200 # 允许连接失败的次数,这是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 default_authentication_plugin=mysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [client] # 设置mysql客户端连接服务端时默认使用的端口和默认字符集 port=3306 default-character-set=utf8 -
cmd执行命令安装mysql:
-
管理员身份运行cmd:“开始”—》找到“Windows PowerShell”—》右键选择“以管理员身份运行”
-
导航到MySQL安装目录的bin目录下(如:
D:\Program Files\MySQL\mysql-8.0.25-winx64\bin):先后在cmd中输入:#进入D盘 D: #导航到bin目录下 cd '.\Program Files\' cd .\MySQL\ cd .\mysql-8.0.25-winx64\ cd .\bin\
-
-
在MySQL安装目录的bin目录下(如:
D:\Program Files\MySQL\mysql-8.0.25-winx64\bin)执行命令.\mysqld.exe --initialize --console -
执行输出结果里面有一段,可获得root用户的初始密码:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: +uDzKBoE7Rgx其中root@localhost:后面的“+uDzKBoE7Rgx”就是初始密码(不含首位空格,每个人的可能不一样),在没有更改密码前,需要记住这个密码,复制保存,后续登录需要用到!
-
安装服务:继续在该bin目录(如:
D:\Program Files\MySQL\mysql-8.0.25-winx64\bin)执行命令:.\mysqld.exe --install -
开启服务:继续在该bin目录下(如:
D:\Program Files\MySQL\mysql-8.0.25-winx64\bin)执行命令:net start能看到输出启动成功,说明 MySql 已经安装成功了。
-
初始密码登录MySQL:继续在MySQL安装目录的bin目录下执行以下命令,然后输入之前获得的root用户初始密码:
mysql -u root -p能看到以mysql开头的下面的行:
PS D:\Program Files\MySQL\mysql-8.0.25-winx64\bin> .\mysql.exe -u root -p Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.25 MySQL Community Server - GPL Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> -
修改root用户密码:在MySQL中输入命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';将新密码换为你自己的密码即可。
-
至此MySQL安装成功,可查看默认安装的数据库和表,在mysql中输入命令:
show databases;可以看到如下的输出:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.21 sec)继续查看mysql数据库中的表的结构:
mysql> use mysql; Database changed mysql> show tables; +------------------------------------------------------+ | Tables_in_mysql | +------------------------------------------------------+ | columns_priv | | component | | db | | default_roles | | engine_cost | | func | | general_log | | global_grants | | gtid_executed | | help_category | | help_keyword | | help_relation | | help_topic | | innodb_index_stats | | innodb_table_stats | | password_history | | plugin | | procs_priv | | proxies_priv | | replication_asynchronous_connection_failover | | replication_asynchronous_connection_failover_managed | | role_edges | | server_cost | | servers | | slave_master_info | | slave_relay_log_info | | slave_worker_info | | slow_log | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +------------------------------------------------------+ 35 rows in set (0.71 sec)
三、MySql connector .NET的下载
1. 安装 Connector/NET8.0
在这里下载 (mysql-installer-community-8.0.25.0.msi) ,下载好之后,右键管理员身份运行,然后会看到一个框框:

然后选择右侧的“Add”——》之后选择上Connector .NET 8.0,然后下一步就好:

2. 找到所需要的 MySql.Data.dll
我们在VS中想使用MySql数据库中的数据,不能像 SQL 那样直接引用:
using System.Data.SqlClient;
所以我们才需要做这个第三步,下载所需要的中间的一个连接器,才可以在VS中进行引用,就像引用Sql一样。我是昨天突然想到SQL也是MicroSoft的,所以这样做也理所应当,别的数据库不让你直接使用,要加个“中间层”。
在第三步下载完之后,找到 MySql.Data.dll,我电脑上的位置在:
C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.5.2\MySql.Data.dll
四、在VS的项目中添加对 MySql.Data.dll 的引用
4.1. 新建VS项目
随便新建个项目,测试下对MySql的引用。
4.1.1 选择 net framework 的项目模板
- 选择 net framework 的项目模板,可以搜索Frame,然后选择,比如选择控制台:

4.1.2 选择Framework为 4.5.2
- 然后再选择 Framework为 4.5.2(因为下载的MySql里面的连接器为4.5版本的,如果版本不对应,也会出现错误,可以见这里):

4.2 添加引用
4.2.1 将 MySql.Data.dll 复制到该工程目录下
- 在下面的目录中找到 MySql.Data.dll:(这里安装目录里的v4.5.2就是版本号,须和 Framework的版本号一致)
C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.5.2
-
选择 MySql.Data.dll,复制到 你要用 MySql 的工程根目录下,如:
D:\VS_Project\CSharp_learing\DataBase\UseMySqlConnectorTest
4.2.2 将 MySql.Data.dll 添加为工程的引用
- 在VS中右键项目—》添加—》引用,会弹出“引用管理器”对话框:

选择“浏览”—》“浏览”,找到 MySql.Data.dll 即可。
然后终于可以自由地 using了!
使用下面的using在c#程序开头,若没有红色下划线,说明添加引用成功:
using MySql.Data;
using MySql.Data.MySqlClient;
五、遇到的错误
5.1 MySql 连接器和.NET的版本不一致
感谢这位博主,给我提供了一种解决思路;我原来是使用的.NET 5.0,使用步骤三中下载的连接器,在使用以下简单的例子时:
using System;
using System.Data;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace _1_GetSchemaTest
{
class Program
{
private static void DisplayData(System.Data.DataTable table)
{
foreach (System.Data.DataRow row in table.Rows)
{
foreach (System.Data.DataColumn col in table.Columns)
{
Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
}
Console.WriteLine("============================");
}
}
static void Main(string[] args)
{
//密码改成自己的;Database 用自己的
string connectStr =
"Server=127.0.0.1;port=3306;" +
"Uid=root;Pwd=******;" +
"Database=world;Charset=utf8";
//string connStr = "server=127.0.0.1;user=root;password=147530;database=world;port=3306;";
MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(connectStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
DataTable table = conn.GetSchema("MetaDataCollections");
//DataTable table = conn.GetSchema("UDF");
DisplayData(table);
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine("Done.");
}
}
}
会报错,经过调试,发现每次在使用 conn.Open() 的时候,都不能直接运行,报错信息如下:
Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'System.Drawing.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. 系统找不到指定的文件。
File name: 'System.Drawing.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(MetadataToken caCtorToken, MetadataImport& scope, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, ListBuilder`1& derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctorWithParameters, Boolean& isVarArg)
at System.Reflection.CustomAttribute.IsCustomAttributeDefined(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, RuntimeType attributeFilterType, Int32 attributeCtorToken, Boolean mustBeInheritable)
at System.Reflection.CustomAttribute.IsDefined(RuntimeType type, RuntimeType caType, Boolean inherit)
at System.RuntimeType.IsDefined(Type attributeType, Boolean inherit)
at System.Diagnostics.StackTrace.ShowInStackTrace(MethodBase mb)
at System.Diagnostics.StackTrace.ToString(TraceFormat traceFormat, StringBuilder sb)
at System.Diagnostics.StackTrace.ToString(TraceFormat traceFormat)
at System.Exception.get_StackTrace()
at System.Exception.ToString()
at _1_GetSchemaTest.Program.Main(String[] args) in D:\VS_Project\CSharp_learing\DataBase\1_GetSchemaTest\Program.cs:line 46
如果是这样的话,大概率是版本问题,检查下你的项目使用的.NET版本,或者按照[4.1中所说新建VS项目](#4.1. 新建VS项目);
5.2 找不到要更改的NET版本
检查当前项目使用的.NET版本的方法:
右键项目——》属性——》应用程序——》目标框架:

如果在这里,点击下拉框,没有找到.NET4的话,应该是建立项目时,选择的模板不正确,感谢这位在CSDN的回答,让我知道了问题的出处,按照[4.1中所说新建VS项目](#4.1. 新建VS项目)即可。

本文详细介绍了如何在C# .NET环境中使用Visual Studio访问MySQL数据库,包括自定义安装MySQL,下载MySQL Connector/NET8.0,解决版本不一致问题,以及在项目中添加对MySql.Data.dll的引用。
2792





