Navicat for SQL 的查询分析器可以调用,程序MySqlCommand调用失败 这是一个坑吗???

问题描述

INSERTINTOiv_invoicehead(DJBH,SHR,DPJC,ZFJE,FPTT,CKMC,CreateTime)Values('DD00102637','俞继红','21克天猫旗舰店','299.0000','俞继红','正品仓',NOW());SET@v_ID=last_insert_id();INSERTINTOiv_invoiceitems(HeadID,SPDM,SPMC,SJDJ,SJJE,BZJE,ZK,SL,BZ,ZL,HJZL)Values(@v_ID,'c.f.03.100.01.01','[mc001s]官方标配白色标准版','299.0000','299.0000','498.0000','0.6004','1.0000','组合商品:c.f.03mc001s(白色标准版)','450.0000','450.0000');

提示错误:记录时间:2014-10-1317:02:43,852线程ID:[14]日志级别:ERROR出错类:_21KE.MySql.MySqlHelperproperty:[(null)]-错误描述:ErrorMySql.Data.MySqlClient.MySqlException(0x80004005):Fatalerrorencounteredduringcommandexecution.--->MySql.Data.MySqlClient.MySqlException(0x80004005):Parameter'@v_ID'mustbedefined.在MySql.Data.MySqlClient.Statement.SerializeParameter(MySqlParameterCollectionparameters,MySqlPacketpacket,StringparmName,Int32parameterIndex)在MySql.Data.MySqlClient.Statement.InternalBindParameters(Stringsql,MySqlParameterCollectionparameters,MySqlPacketpacket)在MySql.Data.MySqlClient.Statement.BindParameters()在MySql.Data.MySqlClient.PreparableStatement.Execute()在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehaviorbehavior)在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehaviorbehavior)在MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()在_21KE.MySql.MySqlHelper.ExecuteNonQuery(MySqlTransactiontrans,CommandTypecmdType,StringcmdText,MySqlParameter[]commandParameters)位置C:Userslenovodocumentsvisualstudio2010Projects21KeInvoicePrint21KE.MySqlMySqlHelper.cs:行号71

解决方案

本帖最后由 xx_mm 于 2014-10-13 17:12:47 编辑
解决方案二:
@v_ID没有定义,提示很清楚啊
解决方案三:
实现思路很简单,上一行执行的InsertSQL语句产生的ID给下面的SQL语句用,之前用Oracle/SQLServer没显得高踩坑了!!
解决方案四:
引用1楼gxingmin的回复:

@v_ID没有定义,提示很清楚啊

同样的语句,为什么查询分析器可以,程序调用不可以?
解决方案五:
可能是mysql的分析器帮你处理了这个语句复制到sqlserver里执行也会报同样的错误
解决方案六:
ado.net里的参数必须要定义
解决方案七:

解决方案八:
INSERTINTOiv_invoicehead(DJBH,SHR,DPJC,ZFJE,FPTT,CKMC,CreateTime)Values('DD00102637','俞继红','21克天猫旗舰店','299.0000','俞继红','正品仓',NOW());//SET@v_ID=last_insert_id();INSERTINTOiv_invoiceitems(HeadID,SPDM,SPMC,SJDJ,SJJE,BZJE,ZK,SL,BZ,ZL,HJZL)Values(last_insert_id(),'c.f.03.100.01.01','[mc001s]官方标配白色标准版','299.0000','299.0000','498.0000','0.6004','1.0000','组合商品:c.f.03mc001s(白色标准版)','450.0000','450.0000');改成这有试试
解决方案九:
引用4楼gxingmin的回复:

可能是mysql的分析器帮你处理了这个语句复制到sqlserver里执行也会报同样的错误

这不是SQLServer,sqlServer语法相对明了,这里在查询分析器可以数据可以插进去,MYSQL不行,问了几个都说这么写没错!程序却报错?和解!?
解决方案十:
引用7楼gxingmin的回复:

INSERTINTOiv_invoicehead(DJBH,SHR,DPJC,ZFJE,FPTT,CKMC,CreateTime)Values('DD00102637','俞继红','21克天猫旗舰店','299.0000','俞继红','正品仓',NOW());//SET@v_ID=last_insert_id();INSERTINTOiv_invoiceitems(HeadID,SPDM,SPMC,SJDJ,SJJE,BZJE,ZK,SL,BZ,ZL,HJZL)Values(last_insert_id(),'c.f.03.100.01.01','[mc001s]官方标配白色标准版','299.0000','299.0000','498.0000','0.6004','1.0000','组合商品:c.f.03mc001s(白色标准版)','450.0000','450.0000');改成这有试试

这样跟我的逻辑有悖,head插入之后,后面可能不止一行可能多行呢!而且必须在一个事务中
解决方案十一:
那你写成存储过程吧,存储过程里先定义@v_ID
解决方案十二:
引用10楼gxingmin的回复:

那你写成存储过程吧,存储过程里先定义@v_ID

项目上不能用存储过程!
解决方案十三:
declare@v_IDint;//加上这句呢?我对mysql不太了解。。。SET@v_ID=last_insert_id();
解决方案十四:
引用12楼gxingmin的回复:

declare@v_IDint;//加上这句呢?我对mysql不太了解。。。SET@v_ID=last_insert_id();

也不成,真悲了个催;加上去掉,什么位置都试了也不成
解决方案十五:
那只能把第一条insert语句和后面的insert语句分两次执行了,BeginTrans...//事务开始cmd.CommandText="insert..."然后获取最后插入的idcmd.CommandText="insert..."Commit;//提交事务

时间: 2024-10-25 09:54:55

Navicat for SQL 的查询分析器可以调用,程序MySqlCommand调用失败 这是一个坑吗???的相关文章

SQL Server 查询分析器快捷键集合

下表列出 SQL Server 查询分析器提供的所有键盘快捷方式. 活动 快捷方式 书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个书签. F2 功能键 书签:移动到上一个书签. SHIFT+F2 取消查询. ALT+BREAK 连接:连接. CTRL+O 连接:断开连接. CTRL+F4 连接:断开连接并关闭子窗口. CTRL+F4 数据库对象信息. ALT+F1 编辑:清除活动的编辑器窗格. CTRL+SHIFT+DEL 编

[SQL]啊?!查询分析器的BUG?!

查询分析 当我们用SQL Server的查询分析器察看一张表时,竟然看到了这样的记录: 奇怪之处就在于"ReceiveTime"字段明明是datetime类型,怎么可能是"62016004"这个数字呢? SQL Server怎么会让这种数字插入呢?即使我们的程序写错了,想往记录里插,那也会得到异常的呀? 还是做数据仓库的有经验,说可能是查询分析器的BUG. 用VBScript写了一个查询的例子,把这条记录的每一个字段报告出来,果然!   结论: 确实是微软的查询分析

sql server 企业管理器与应用程序的连结失败

由于N久没有用sql server了,所以在对某台sql server的数据库做备份和迁移时,我选择了比较容易操作的图形化界面--企业管理器.(当然会有命令在查询分析器里操作更好)不过新装的 sql server在打开查询分析器时,跳出了一个错误,见下图: 解决方法: 开始--运行中输入regsvr32 semsfc.dll /s 回车,问题解决. 接着点击sql server组--右建新建sql server注册--下一步--在可用的服务器里,选择要连结的服务器. 添加完成后,在数据库列表里选

仿查询分析器的C#计算器——1.初步分析

计算器是很多编程初学者都做过的,从最简单的控制台程序开始,输入值,输入运算符,再输入值,得到一个结果.带界面的基本上是模仿 Windows操作系统的计算器,通过按钮输入值和运算符,然后给出运算结果.能不能直接输入表达式,或者能够对好几个表达式进行计算,或者 选择表达式中的一部分进行计算,如果输入错误能不能指出表达式中的错误位置?这样的要求类似于MS SQL的查询分析器,本系列文章将介绍 如何实现这样一个计算器.(这些内容已经涉及到编译原理,但本人并非计算机专业毕业,只是稍微看了一下编译原理的资料

关于sql server查询语句的写法。

问题描述 关于sql server查询语句的写法. 怎样写一个查询语句select distinct ID from TrainTime order by ID select Station from TrainTime where S_No='1'order by ID select Stationfrom TrainTime where D_Time='-' order by ID 怎样把这3个查询语句写为一句啊,让查询查来的结果为这3列数据. 因为我想建一个表,为3列,列名为:列车车次.起

SQL 模糊查询

  在进行数据库查询时,有完整查询和模糊查询之分. SQL模糊查询,使用like比较字,加上SQL里的通配符,请参考以下: 1.LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden). 2.LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer.Stringer). 3.LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet.Green.McBadden). 4.LIKE'_heryl' 将搜索以字母 her

有关SQL模糊查询_Mysql

一般模糊查询语句如下: 复制代码 代码如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为"张三","张猫三"."三脚猫","唐三藏"

使用查询分析器调整SQL服务器脚本

查询分析|服务器|脚本 我喜欢把SQL服务器所捆绑的工具看作是倒金字塔型的,诊断和检查一般问题的工具在顶端,寻找和诊断问题具体区域的工具在底部.除了提供一种编写SQL脚本的便捷方式之外,在你需要解决特定SQL脚本里明确问题的时候,查询分析器(Query Analyzer)还是所需要使用的资源.如果你需要指出哪个查询正在保持着某个特定表格的锁定状态,你也会希望使用查询分析器. 查询分析器的关键诊断特性是它能够显示某个查询的执行计划.这个执行计划会向你提供各种类型的有用信息,例如在查询的执行期间如何

使用查询分析器调整SQL服务器

我喜欢把SQL服务器所捆绑的工具看作是倒金字塔型的,诊断和检查一般问题的工具在顶端,寻找和诊断问题具体区域的工具在底部.除了提供一种编写SQL脚本的便捷方式之外,在你需要解决特定SQL脚本里明确问题的时候,查询分析器(Query Analyzer)还是所需要使用的资源.如果你需要指出哪个查询正在保持着某个特定表格的锁定状态,你也会希望使用查询分析器.查询分析器的关键诊断特性是它能够显示某个查询的执行计划.这个执行计划会向你提供各种类型的有用信息,例如在查询的执行期间如何以及何时使用或者不使用索引