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版本,以及相关安装包的版本选择要注意,本文没有进行更多的测试,还有其他的很多坑没有踩,踩到再说吧。

  • 相关阅读:
    图片上传-下载-删除等图片管理的若干经验总结3-单一业务场景的完整解决方案
    图片上传-下载-删除等图片管理的若干经验总结2
    HDU 1195 Open the Lock
    HDU 1690 Bus System
    HDU 2647 Reward
    HDU 2680 Choose the best route
    HDU 1596 find the safest road
    POJ 1904 King's Quest
    CDOJ 889 Battle for Silver
    CDOJ 888 Absurdistan Roads
  • 原文地址:https://www.cnblogs.com/superfeeling/p/11787465.html
Copyright © 2011-2022 走看看