1. 程式人生 > >使用VS2013操作MYSQL8 (ADO.NET方式 & EF6)

使用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)\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 指令或程式集引用?)

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)\MySQL\Connector NET 8.0\Assemblies\v4.5.2下MySql.Data.dll和MySql.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版本,以及相關安裝包的版本選擇要注意,本文沒有進行更多的測試,還有其他的很多坑沒有踩,踩到再說