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