运用VS2013操纵MYSQL8 (ADO.NET体式格局 & EF6)
2019-11-18杂谈搜奇网41°c
A+ A-本日有时间测试了一下经由历程.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版本,以及相干装置包的版本挑选要注重,本文没有举行更多的测试,另有其他的许多坑没有踩,踩到再说吧。