zoukankan      html  css  js  c++  java
  • 使用VS2013操作MYSQL8 (ADO.NET方式 & EF6)

    今天有时间测试了一下通过.net环境操作MYSQL数据库,测试过程及结果记录如下:

    1、MYSQL安装

    (1)我是从MYSQL官网下载的最新版,即MYSQL8.0,在MySql官网的下载页面,找到“MySQL Installer for Windows”。

    MySql下载页面地址:https://dev.mysql.com/downloads/

    上图中,MySql for Visual Studio和Connector/NET用于后边的EF操作,MySQL Installer for Windows为Windows上的安装文件下载。

    (2)MySql一共提供两种安装方式,一种本地安装,一个是在线安装,我是下载的本地安装文件。如图:

    下载之后一路“Next”,具体安装方式不详述,可以参考相关文章。

    安装完成后,顺便装了一个MySql可视化工具:Navicat for mysql。关于Navicat for mysql的破解安装,可以参考:https://blog.csdn.net/mqingo/article/details/84314685。

    然后在MySql建了一个测试库Test,同时建了一张测试表:Student,为便于测试,只设置了两个字段:Id和Name。

    2、ADO.NET方式操作MySql

    .(1)NET操作MySql,需要先引用MySQL.Data.dll,这个文件的默认位置在:C:Program Files (x86)MySQLConnector NET 8.0Assembliesv4.5.2。打开这个文件夹,可以看到除了这个MySQL.Data.dll,MySql官方还提供了其他一些如:MySql.Data.EntityFramework.dll的文件,后面会用到,其他像MySQL.Data.EntityFrameworkCore.dll应该是针对.net Core的相应提供程序。

    (2)新建一个.net控制台应用程序,引用上面提到的MySQL.Data.dll。通过对象浏览器查看,可以看到MySQL.Data.dll提供了诸如ADO访问SqlServer的相关功能。如:MySqlConnection 、MySqlCommand、MySqlDataAdapter、MySqlDataReader等,所不同的只是由Sql换成了Mysql。

    (3)设置数据库连接字符串,编写相关代码进行测试,几个内置对象的用法与SqlServer完全相同,不同的只是MySql本身的SQL语法个别与SqlServer不同,因此在执行SQL时应该注意。

    class Program
        {
            static void Main(string[] args)
            {
                string connstr = "Server=localhost;User Id=root;Password=******;PersistSecurityInfo=True;Port=3306;DataBase=test;Charset=utf8mb4;SslMode=none";
    
                //插入数据
                using (MySqlConnection conn = new MySqlConnection(connstr))
                {
                    MySqlCommand cmd = new MySqlCommand("INSERT INTO Student (name) VALUES('test12')", conn);
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
    
                //数据读取器测试
                using (MySqlConnection conn = new MySqlConnection(connstr))
                {
                    MySqlCommand cmd = new MySqlCommand("SELECT * FROM Student", conn);
                    conn.Open();
                    MySqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    while(sdr.Read())
                    {
                        Console.WriteLine(string.Format("Id:{0} Name:{1}", sdr["Id"], sdr["Name"]));
                    }
                }
    
                //DataSet测试
                using (MySqlConnection conn = new MySqlConnection(connstr))
                {
                    MySqlDataAdapter sda = new MySqlDataAdapter("SELECT * FROM Student", conn);
                    DataTable dt = new DataTable();
                    sda.Fill(dt);
                    foreach(DataRow dr in dt.Rows)
                    {
                        Console.WriteLine(string.Format("Id:{0} Name:{1}", dr["Id"], dr["Name"]));
                    }
                }
    
                using (MySqlConnection conn = new MySqlConnection(connstr))
                {
                    
                }
            }
        }

    (4)测试结果

    注意事项:

    MySql 8的MySql.Data.dll要求.net Framework版本最低为v4.5.2,通过MySql.Data.dll所在路径也能看出来

    如果低于此版本,在代码编译期会无法通过,提示:未能找到类型或命名空间名称“MySql”(是否缺少 using 指令或程序集引用?)

    3、EF方式操作MySql

    采用EF方式操作MySql,需要先安装两个插件,然后还需要通过NuGet安装EF,中间可能会踩坑。具体步骤如下:

    (1)安装Visual Studio 2013所需插件

    在使用Visual Studio 2013添加ADO.NET实体数据模型新建连接时,默认是没有Mysql选项的。此时我们需要安装两个东西:

    1、mysql-for-visualstudio:Mysql的Visual Studio插件。

    mysql-for-visualstudio的官网下载地址:https://dev.mysql.com/downloads/windows/visualstudio/,MySql官网默认提供的版本是1.2.9的安装包,但1.2.9是不支持VS2013的,如果安装1.2.9版本的话,会提示最低要求你的VS版本是2015。

    此时我们可以下载低版本的安装包,在刚才的下载页面上,点击“Looking for previous GA versions?”,如图:

    点击后,在页面上下载1.1.4版本的安装包。

     2、mysql-connector-net:.net连接Mysql的程序。

    网上有资料说,这个.net连接程序并非越高越好,但我既然安装了MySql 8,自然这个mysql-connector-net也要安装对应的版本。

    mysql-connector-net安装包下载地址:https://dev.mysql.com/downloads/connector/net/

    (2)通过NuGet安装EF


    完成上面的两个插件安装后,在添加ADO.NET数据库时的数据源选择就会出现MySql选择项,如图:

    在选择EF版本的时候,会报错,提示找不到兼容的实体框架提供程序。如图所示:

    解决办法如下:

    1、先通过NuGet安装EntityFramework  6.0

         Install-Package EntityFramework -Version 6.0.0
         Install-Package EntityFramework.zh-Hans -Version 6.0.0

    2、在你的项目中引入C:Program Files (x86)MySQLConnector NET 8.0Assembliesv4.5.2下MySql.Data.dllMySql.Data.EntityFramework.dll两个文件。

    3、在项目配置文件的entityFramework节点下的providers节点增加一个提供程序:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
      </startup>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="v11.0" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
          <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework"></provider>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        </providers>
      </entityFramework>
      <connectionStrings>
        <add name="testEntities" connectionString="***" providerName="System.Data.EntityClient" />
      </connectionStrings>
    </configuration>

    注意红色标识部分,即:MySql.Data.EntityFramework,要与你的MySql.Data.EntityFramework.dll中的命名空间保持一致,此处版本不同要引用的程序集名称也不相同。

    4、重新生成项目,一定要重新生成项目!

    5、重新添加ADO.NET实体数据模型,已经可以添加成功,如图:

    6、可以进行一个简单测试,测试代码如下:

    class Program
        {
            static void Main(string[] args)
            {
                testEntities db = new testEntities();
    
                //添加数据
                db.student.Add(new student { Name = "这是一个测试" });
                db.SaveChanges();
    
                //读取数据
                foreach(var p in db.student)
                {
                    Console.WriteLine(p.Name);
                }
            }
        }

    以上是VS2013连接MySql的一些记录,其中.net版本,以及相关安装包的版本选择要注意,本文没有进行更多的测试,还有其他的很多坑没有踩,踩到再说吧。

  • 相关阅读:
    mac 监控文件变化并重启php
    关闭某个命令的进程
    debian 添加永久环境变量方法
    debian swoole环境
    swoole 编程环境安装
    计算机网络知识笔记
    Mac 配置 php-fpm
    存储过程 利用游标 解决复制业务
    ubuntu 宝塔安装一条龙服务
    项目重零开始搭建
  • 原文地址:https://www.cnblogs.com/superfeeling/p/11787465.html
Copyright © 2011-2022 走看看