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 ...
随机推荐
- supervisor-3:xml_rpc
别人博客转载,做个记录 原文链接:http://lixcto.blog.51cto.com/4834175/1540795 supervisor提供的两种管理方式,supervisorctl和web其 ...
- python 处理视频输入输出
视频的处理和图片的处理类似,只不过视频处理需要连续处理一系列图片. 一般有两种视频源,一种是直接从硬盘加载视频,另一种是获取摄像头视频. 0x00. 本地读取视频 核心函数: cv.CaptureFr ...
- Good Bye 2016
A - New Year and Hurry (water) #include <bits/stdc++.h> using namespace std; int main() { ]; ; ...
- mysql优化
一.优化事项 1. 数据库(表)设计合理 (不合理设计导致内伤) 我们的表设计要符合3NF 3范式(规范的模式) , 有时我们需要适当的逆范式.2. sql语句的优化(索引,常用小技巧 ...
- java-并发-保护代码块
浏览以下内容前,请点击并阅读 声明 线程经常需要协调其动作,最常用的协调方法就是保护代码块,该代码块以一个条件判断开始,当判断为true时才能开始执行. 假设一个方法guradedJoy必须等到变量j ...
- Theano 学习笔记(一)
Theano 学习笔记(一) theano 为什么要定义共享变量? 定义共享变量的原因在于GPU的使用,如果不定义共享的话,那么当GPU调用这些变量时,遇到一次就要调用一次,这样就会花费大量时间在数据 ...
- Mybatis总结
jdbc.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/testdb username=root pa ...
- display:table-cell
布局神器display:table-cell Author:owenhong2015-06-17 随着时间的推进,ie6.ie7在中国浏览器市场的占有率越来越低的情况,我现在工作的团队,经过用户访问数 ...
- [RxJava^Android]项目经验分享 --- 失败重试
简单介绍一下业务逻辑:获取字符串,如果获取失败进行10次重试,超出10次未成功视为失败. 模拟获取字符串场景 代码块 class MsgTool { int count; String getMsg( ...
- 使用HttpClient来异步发送POST请求并解析GZIP回应
.NET 4.5(C#): 使用HttpClient来异步发送POST请求并解析GZIP回应 在新的C# 5.0和.NET 4.5环境下,微软为C#加入了async/await,同时还加入新的Syst ...