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

  • 2019 年 11 月 3 日
  • 筆記

今天有時間測試了一下通過.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版本,以及相關安裝包的版本選擇要注意,本文沒有進行更多的測試,還有其他的很多坑沒有踩,踩到再說吧。

Exit mobile version