使用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版本,以及相关安装包的版本选择要注意,本文没有进行更多的测试,还有其他的很多坑没有踩,踩到再说吧。
使用VS2013操作MYSQL8 (ADO.NET方式 & EF6)的更多相关文章
- IOS文件操作的两种方式:NSFileManager操作和流操作
1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...
- 计算属性 vs 侦听属性 当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的
https://cn.vuejs.org/v2/guide/computed.html#基础例子 计算属性 vs 侦听属性 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属 ...
- c++ 操作Mysql ado
#pragma once #ifndef DB_MYSQL_H #define DB_MYSQL_H #include "stdafx.h" #include <wins ...
- Attribute操作的性能优化方式
Attribute是.NET平台上提供的一种元编程能力,可以通过标记的方式来修饰各种成员.无论是组件设计,语言之间互通,还是最普通的框架使 用,现在已经都离不开Attribute了.迫于Attribu ...
- VS2012 Unit Test —— 我对IdleTest库动的大手术以及对Xml相关操作进行测试的方式
[1]我的IdleTest源码地址:http://idletest.codeplex.com/ [2]IdleTest改动说明:2013年10月份在保持原有功能的情况下对其动了较大的手术,首先将基本的 ...
- Spring实现初始化和销毁bean之前进行的操作,三种方式
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...
- [转]Windows系统中监控文件复制操作的几种方式
1. ICopyHook 作用: 监视文件夹和打印机移动,删除, 重命名, 复制操作. 可以得到源和目标文件名. 可以控制拒绝操作. 缺点: 不能对文件进行控制. 只对Shell文件操作有效, 对原生 ...
- 数据库操作(ADO)
QTP工具本身自带有数据查询和验证功能,但是使用的人会感觉这个功能使用起来比较麻烦,灵活性和复用性较低,于是我们选择了用脚本调用ADO组件实现数据库的操作,现总结下工作中用到的数据库操作,代码如下: ...
- C#操作Excel的OLEDB方式与COM方式比较
2013-03-15 13:42:54 作者:有理想的码农 在对Excel进行读写操作时,使用微软自身提供的解决方案,有两种(第三方方式除外),分别是OLEDB方式和调用COM组件的方式 ...
随机推荐
- [数学基础]奇异值分解SVD
之前看到过很多次奇异值分解这个概念,但我确实没有学过.大学线性代数课教的就是坨屎,我也没怎么去上课,后来查了点资料算是搞清楚了,现在写点东西总结一下. 奇异值分解,就是把一个矩阵拆成一组矩阵之和.在数 ...
- PHP将base64数据流转换成图片并保存
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规范. Ba ...
- RocketMQ 源码学习笔记 Producer 是怎么将消息发送至 Broker 的?
目录 RocketMQ 源码学习笔记 Producer 是怎么将消息发送至 Broker 的? 前言 项目结构 rocketmq-client 模块 DefaultMQProducerTest Roc ...
- Thinkphp5.0第一篇
THINKphp5.0框架 mvc moudle(数据)+view(表现层)+controller(业务逻辑) thinkphp5.0特点 中国人开发最符合国人习惯和思维方式 开源免费面向对象轻量级的 ...
- Spark 学习笔记之 distinct/groupByKey/reduceByKey
distinct/groupByKey/reduceByKey: distinct: import org.apache.spark.SparkContext import org.apache.sp ...
- 【windows】远程桌面 把远程服务器的explorer.exe进程关掉了,咋办?
在操作windows2008R2服务器时不小心把explorer.exe进程关闭了,瞬间整个界面就蓝色了. 重启,做不到,各种快捷键用不了,最后发现Alt+Tab可以用,刚好打开了IIS, 打开其中一 ...
- java之ReentrantLock详解
前言 如果一个代码块被synchronized修饰了,当一个线程获取了相应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的释放,现在有这么一种情况,这个获取锁的线程由于要等待IO或者其他原 ...
- tcpdump使用详情及案例
转载http://starsliao.blog.163.com/blog/static/89048201062333032563/ TCPdump抓包命令tcpdump是一个用于截取网络分组,并输出分 ...
- 解决Maven依赖jar包冲突总结
maven导入jar包中的一些概念: 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包. 传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中 ...
- [Luogu1379]八数码难题
题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...