MySql.Data.MySqlClient.MySqlException: Parameter ‘@maxid’ must be defined
本文涉及到的mysql知识点:
- mysql中的if条件语句用法: IF(expr1,expr2,expr3)
- mysql使用变量(mysql中变量不用事前申明)
- mysql事务
- testcase
为了测试mysql事务,写了个testcase,
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data; [TestClass]
public class MySqlTransactionTest
{
[TestMethod]
public void AddStudent()
{
string sql = @"
BEGIN;
SELECT @maxid:= MAX(id) FROM student;
SET @maxid:=IF(@maxid IS NULL,0,@maxid);
INSERT student VALUES(@maxid+1,'');
COMMIT;";
ExecuteNonQuery(sql); } string Connstring = "server=192.168.40.223;user id=yimei;password=password;database=test;Character Set=utf8;";
private int ExecuteNonQuery(string sql)
{
MySqlConnection conn = new MySqlConnection(Connstring);
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.CommandType = CommandType.Text;
conn.Open();
int i = cmd.ExecuteNonQuery();
conn.Close();
//Console.WriteLine("ExecuteNonQuery:{0}", i);
return i;
}
}
运行testcase,发现报如下异常:MySql.Data.MySqlClient.MySqlException: Parameter ‘@maxid’ must be defined

看来,是ado.net把@maxid当成了一个变量,要求必须传递@maxId参数。 当然,这违背了我的初衷——我的sql逻辑是在新增student时将其id字段值设置为现有最大id+1,我本来只是希望它把我这段sql执行一下即可。
和一个哥们讨论了一下,他说如果ado.net连接的是SqlServer,这种情况是没有问题的,我将信将疑。不过,经过测试,还真是如此。
那么,mysql怎么就会报异常呢?
我的mysql版本是(命令SELECT @@VERSION;):5.5.50-MariaDB。网上了解了一下,要在连接串里显示的加一个Allow User Variables=True,才能允许sql里有用户自定义变量的出现(见老外的博客http://blog.tjitjing.com/index.php/2009/05/mysqldatamysqlclientmysqlexception-parameter-id-must-be-defined.html)。
附ado.net连接SqlServer场景用例:
using System.Data.SqlClient;
[TestMethod]
public void MsSqlAt()
{
string sqlConnstring = "server=192.168.10.27;user id=sa;password=En7Jw5Xh;database=sms;";
string sql = @"
declare @num int;
SELECT @num=count(1) from T_sms_send;
select @num;
";
using (SqlConnection conn = new SqlConnection(sqlConnstring))
{
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
var obj = cmd.ExecuteScalar();
conn.Close();
Console.WriteLine(obj);
}
}
MySql.Data.MySqlClient.MySqlException: Parameter ‘@maxid’ must be defined的更多相关文章
- MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.
转自:https://blog.csdn.net/zhaoqi5705/article/details/12087649?locationNum=15 MySql.Data.MySqlClient.M ...
- 错误记录-MySql.Data.MySqlClient.MySqlException (0x80004005): Timeout expired.
-- ::25.026 +: [ERR] Connection id "0HLQH64H76UL5", Request id "0HLQH64H76UL5:0000000 ...
- MySql 8.0 C#连接报错 MySql.Data.MySqlClient.MySqlException (0x80004005): Authentication to host '12.118.224.181' for user 'root' using method 'caching_sha2_password' failed with message: Reading from t
解决方法 在连接字符串后面加上 SslMode=None
- at MySql.Data.MySqlClient.MySqlStream.ReadPacket 或 FUNCTION account.AddMinutes does not exist
Application Exception MySql.Data.MySqlClient.MySqlException FUNCTION account.AddMinutes does not exi ...
- C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装
源码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...
- 无法为具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6”
"System.InvalidOperationException"类型的未经处理的异常在 mscorlib.dll 中发生 其他信息: 无法为具有固定名称"MySql. ...
- MySql.Data.MySqlClient连接MySql
在C#中连接MySql数据库其实是件很简单的事情,但对于刚开始学习C#的朋友来说,问题却是不小,主要原因是相对于ACCESS和MSSql来说,MySql方面的教程文章实在太少,我也是自己摸索好好半天才 ...
- QA:无法为具有固定名称“MySql.Data.MySqlClient”...
Question: 无法为具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“MySql.Data.MySqlC ...
- System.TypeInitializationException: 'The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception.'
下午在调试的时候报错数据库连接就报错我就很纳闷后面用原来的代码写发现还是报错 System.TypeInitializationException: 'The type initializer for ...
随机推荐
- mongodb提示api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案
mongodb提示api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案 官方最新版的mongodb需要: VC++2015 RC x64的支持,否则会报出
- EditText获取和失去焦点,软键盘的关闭,和软键盘的显示和隐藏的监听
软键盘显示和隐藏的监听: 注: mReplayRelativeLayout是EditText的父布局 //监听软键盘是否显示或隐藏 mReplayRelativeLayout.getViewTreeO ...
- HDU5937 Equation(DFS + 剪枝)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5937 Description Little Ruins is a studious boy, ...
- 【转】oracle中rowid的用法 (全面)
ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表 ...
- spark scala学习笔记
搞清楚几个概念: 闭包 柯里化 搭建了intellij idea 的scala 开发环境
- make工作时的执行步骤
GNU的make工作时的执行步骤 (1)读入所有的Makefile (2)读入被include的其它Makefile (3)初始化文件中的变量 (4)推导隐晦规则,并分析所有的规则 (5)为所有的目标 ...
- windows消息机制详解(转载)
消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了.例如,单击鼠标.改变窗口尺寸.按下键盘上的一个键都会使Windows发送一个消息给应用程序.消息本身是作为一个记录传递给应用程序的 ...
- 从源代码构建 Go 开发环境
从源代码构建 Go 开发环境 Go 1.5 之前的版本 安装C 语言开发环境 在Go 1.5 之前的版本(比如 1.3.1.4),都会部分的依赖 C 语言的工具链,所以如果你有C 语言的开发环境,就可 ...
- 关于 IE6、 IE7兼容性总结(转)
其实浏览器的不兼容,我们往往是各个浏览器对于一些标准的定义不一致导致的,因此,我们可以进行一些初始化,很多问题都很轻松解决. 下面是14条特殊情况仅供参考: 1. 文字本身的大小不兼容.同样是font ...
- 日常关键字:定时关机、该任务映像已损坏或已篡改.(0x80041321)、ChaZD生词同步扇贝
我在床上用chinanet网络慢得简直令人发指,12B/S.是的你没有看错,这是我最常看到的网速.但是我最近发现电脑联网开出一个WiFi,在床上用手机上网时,网速会一点提升,可达到1KB/S(⊙﹏⊙) ...