如何用VS EF连接 Mysql,以及执行SQL语句 和存储过程?

 

VS2013, MySQL5.7.18 , MySQL5.7.14

 

执行SQL语句:

   ztp_user z = new ztp_user();

                object[] obj = new object[] { z };

 

                MySqlParameter[] p = new MySqlParameter[]{

                new MySqlParameter("@username","admin1")

                };

            var result = db.Database.SqlQuery<ztp_user>("SELECT * from ztp_user  where username=@username LIMIT 10", p).ToList();

 

执行存储过程:

                DateTime beginDateTime = Convert.ToDateTime("2017-10-21");

                DateTime endDateTime = Convert.ToDateTime("2017-10-22");

                int beginTimeStamp = 1508515200;

                int endTimeStamp = 1508601600;

 

                var result = db.sp_BI(beginDateTime, endDateTime, beginTimeStamp, endTimeStamp).ToList();

 

http://www.360doc.com/content/14/0709/00/5054188_393081769.shtml

 

 

使用过程中遇到的坑:

 

线上的数据库需要新写一个存储过程,不能在线上直接操作,需要从线上导出一个数据库,最新的数据

 

坑一:导出的sql文件,需要导入的时候报错,总提示语法错误

原因是线上的MySQL版本和本地的版本不一致

解决方案:

.MySQL导入数据从5.7.18 高版本导入到低版本数据5.7.14时候提示语法错误:

需要将双引号替换成单引号

CREATE TABLE "ztp_admin_nav" (

双引号替换成单引号

 

坑二:安装了VS后还不能直接连接使用MySQL,需要安装插件

 

解决方案:

1、mysql-for-visualstudio:Mysql的Visual Studio插件,推荐1.2.3版本

 

2、mysql-connector-net:.net连接Mysql的程序,推荐6.8.3,版本。如果安装高版本可能导致一系列问题。详见:http://blog.csdn.net/niewq/article/details/41877301。

 

http://www.cnblogs.com/wangwust/p/6638666.html

 

坑三:插件也安装好了,使用 EF,DB first的时候,生成Model的时候又报错了

StrongTypingException: The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull.'.

 

解决方案:

1.重启mysql 服务

2.set global optimizer_switch='derived_merge=OFF';

EF连接mysql的时候:

1.重启mysql服务

use <<database name>>

2.   set global optimizer_switch='derived_merge=OFF';

3.添加EF ADO.NET ENTITY

 

Unexpected exception occurred when generating the model. See output window for more details. Exception message : 'StrongTypingException: The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull.'.

https://stackoverflow.com/questions/31961646/ef6-mysql-strongtypingexception-when-column-is-not-pk

 

坑四:发现在MySQL中执行这个命令的时候又报错了,无法设置 Global derived-merge

 出现 1055 sql group by order by 错误1055 错误

 

解决方案:

修改 sql model 避免 group by 错误  Group by 出错:

 

推荐新的修改方法:

按需修改

select @@global.sql_mode;

set @@global.sql_mode ='REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE';

重启mysql

 

 

 

老的修改方法:

select @@global.sql_mode;

set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

 

坑五正常情况,修改MySQL 的sql model后,group by的问题就可以解决了

  但是这次还不行,执行 set global optimizer_switch='derived_merge=OFF'; 依然报1055错

Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'inform:

 

解决方案:

1.修改my.cnf 最后一行添加 sql_mode='NO_ENGINE_SUBSTITUTION'

http://www.cnblogs.com/gaojupeng/p/5740011.html

 

windows上面是my.ini

linux上面是 my.cnf

 

2.重启mysql

 

坑六EF终于可以添加上model了,但是写代码的时候报错,找不到命名空间

 

解决方案:

C#连接MySQL缺少引用命名空间:

引入MySQL.Data.dll

http://blog.csdn.net/zzzzzzzert/article/details/7925497

 

坑七:

代码终于写完,调试也可以了,写完发布到服务器上面,又报错了,本地可以,服务器不行,这个就更坑了,开启web config 报错提示 customer error model =“OFF”,看到了报错信息

 

报错:Facet 'Precision' must not be specified for type 'datetime'.

是因为存储过程中使用了 timestamp 类型的参数

本地5.7.14 可以EF可以连接存储过程成功,发布后MySQL使用5.7.18版本不兼容数据类型

解决方案:

存储过程的数据类型,从timestamp 改成了 varchar(50),传参数‘2017-10-25’

再次发布使用EF可以成功连接MySQL

 

终于线上可以用了,调用MySQL存储过程,调用sql语句

 

转载于:https://www.cnblogs.com/andytech/p/7732742.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值