C# CSharp .NET 使用 MySql 详解/在Visual Studio 中访问MySql数据库的方法

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

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项目)即可。



评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值