使用VS2013操做MYSQL8 (ADO.NET方式 & EF6)

今天有時間測試了一下經過.net環境操做MYSQL數據庫,測試過程及結果記錄以下:mysql

一、MYSQL安裝sql

(1)我是從MYSQL官網下載的最新版,即MYSQL8.0,在MySql官網的下載頁面,找到「MySQL Installer for Windows」。數據庫

MySql下載頁面地址:https://dev.mysql.com/downloads/windows

上圖中,MySql for Visual Studio和Connector/NET用於後邊的EF操做,MySQL Installer for Windows爲Windows上的安裝文件下載。瀏覽器

(2)MySql一共提供兩種安裝方式,一種本地安裝,一個是在線安裝,我是下載的本地安裝文件。如圖:框架

下載以後一路「Next」,具體安裝方式不詳述,能夠參考相關文章。ide

安裝完成後,順便裝了一個MySql可視化工具:Navicat for mysql。關於Navicat for mysql的破解安裝,能夠參考:https://blog.csdn.net/mqingo/article/details/84314685。工具

而後在MySql建了一個測試庫Test,同時建了一張測試表:Student,爲便於測試,只設置了兩個字段:Id和Name。測試

二、ADO.NET方式操做MySqlui

.(1)NET操做MySql,須要先引用MySQL.Data.dll,這個文件的默認位置在:C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.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 指令或程序集引用?)

三、EF方式操做MySql

採用EF方式操做MySql,須要先安裝兩個插件,而後還須要經過NuGet安裝EF,中間可能會踩坑。具體步驟以下:

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

在使用Visual Studio 2013添加ADO.NET實體數據模型新建鏈接時,默認是沒有Mysql選項的。此時咱們須要安裝兩個東西:

一、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版本的安裝包。

 二、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版本的時候,會報錯,提示找不到兼容的實體框架提供程序。如圖所示:

解決辦法以下:

一、先經過NuGet安裝EntityFramework  6.0

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

二、在你的項目中引入C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.5.2下MySql.Data.dllMySql.Data.EntityFramework.dll兩個文件。

三、在項目配置文件的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中的命名空間保持一致,此處版本不一樣要引用的程序集名稱也不相同。

四、從新生成項目,必定要從新生成項目!

五、從新添加ADO.NET實體數據模型,已經能夠添加成功,如圖:

六、能夠進行一個簡單測試,測試代碼以下:

 

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版本,以及相關安裝包的版本選擇要注意,本文沒有進行更多的測試,還有其餘的不少坑沒有踩,踩到再說吧。

相關文章
相關標籤/搜索