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

蔡袅 2014-10-13 05:09:35
INSERT INTO iv_invoicehead(DJBH,SHR,DPJC,ZFJE,FPTT,CKMC,CreateTime) 
Values('DD00102637','俞继红','21克天猫旗舰店','299.0000','俞继红','正品仓',NOW());
SET @v_ID = last_insert_id();
INSERT INTO iv_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.03 mc001s(白色标准版)','450.0000','450.0000');


提示错误:

记录时间:2014-10-13 17:02:43,852
线程ID:[14]
日志级别: ERROR
出错类:_21KE.MySql.MySqlHelper property: [(null)] -
错误描述:Error

MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal error encountered during command execution. ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Parameter '@v_ID' must be defined.
在 MySql.Data.MySqlClient.Statement.SerializeParameter(MySqlParameterCollection parameters, MySqlPacket packet, String parmName, Int32 parameterIndex)
在 MySql.Data.MySqlClient.Statement.InternalBindParameters(String sql, MySqlParameterCollection parameters, MySqlPacket packet)
在 MySql.Data.MySqlClient.Statement.BindParameters()
在 MySql.Data.MySqlClient.PreparableStatement.Execute()
在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
在 MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
在 _21KE.MySql.MySqlHelper.ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, String cmdText, MySqlParameter[] commandParameters) 位置 C:\Users\lenovo\documents\visual studio 2010\Projects\21KeInvoicePrint\21KE.MySql\MySqlHelper.cs:行号 71
...全文
304 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxingmin 2014-10-13
  • 打赏
  • 举报
回复
那只能把第一条insert语句和后面的insert语句分两次执行了, BeginTrans... //事务开始 cmd.CommandText = "insert ..." 然后获取最后插入的id cmd.CommandText="insert ..." Commit; //提交事务
蔡袅 2014-10-13
  • 打赏
  • 举报
回复
引用 12 楼 gxingmin 的回复:
declare @v_ID int; //加上这句呢?我对mysql不太了解。。。 SET @v_ID = last_insert_id();
也不成,真悲了个催;加上 去掉,什么位置都试了 也不成
gxingmin 2014-10-13
  • 打赏
  • 举报
回复
declare @v_ID int; //加上这句呢?我对mysql不太了解。。。 SET @v_ID = last_insert_id();
蔡袅 2014-10-13
  • 打赏
  • 举报
回复
引用 10 楼 gxingmin 的回复:
那你写成存储过程吧,存储过程里先定义@v_ID
项目上不能用存储过程!
gxingmin 2014-10-13
  • 打赏
  • 举报
回复
那你写成存储过程吧,存储过程里先定义@v_ID
蔡袅 2014-10-13
  • 打赏
  • 举报
回复
引用 7 楼 gxingmin 的回复:
INSERT INTO iv_invoicehead(DJBH,SHR,DPJC,ZFJE,FPTT,CKMC,CreateTime) Values('DD00102637','俞继红','21克天猫旗舰店','299.0000','俞继红','正品仓',NOW()); //SET @v_ID = last_insert_id(); INSERT INTO iv_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.03 mc001s(白色标准版)','450.0000','450.0000'); 改成这有试试
这样跟我的逻辑有悖,head插入之后,后面可能不止一行可能多行呢!而且必须在一个事务中
蔡袅 2014-10-13
  • 打赏
  • 举报
回复
引用 4 楼 gxingmin 的回复:
可能是mysql的分析器帮你处理了 这个语句复制到sqlserver里执行也会报同样的错误
这不是SQL Server,sql Server语法相对明了,这里在查询分析器可以数据可以插进去,MYSQL 不行,问了几个都说这么写没错!程序却报错?和解!?
gxingmin 2014-10-13
  • 打赏
  • 举报
回复
INSERT INTO iv_invoicehead(DJBH,SHR,DPJC,ZFJE,FPTT,CKMC,CreateTime) Values('DD00102637','俞继红','21克天猫旗舰店','299.0000','俞继红','正品仓',NOW()); //SET @v_ID = last_insert_id(); INSERT INTO iv_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.03 mc001s(白色标准版)','450.0000','450.0000'); 改成这有试试
蔡袅 2014-10-13
  • 打赏
  • 举报
回复
gxingmin 2014-10-13
  • 打赏
  • 举报
回复
ado.net里的参数必须要定义
gxingmin 2014-10-13
  • 打赏
  • 举报
回复
可能是mysql的分析器帮你处理了 这个语句复制到sqlserver里执行也会报同样的错误
蔡袅 2014-10-13
  • 打赏
  • 举报
回复
引用 1 楼 gxingmin 的回复:
@v_ID没有定义,提示很清楚啊
同样的语句,为什么查询分析器可以,程序调用不可以?
蔡袅 2014-10-13
  • 打赏
  • 举报
回复
实现思路很简单,上一行执行的Insert SQL语句产生的ID给下面的SQL语句用,之前用Oracle/SQL Server 没显得高踩坑了!!
gxingmin 2014-10-13
  • 打赏
  • 举报
回复
@v_ID没有定义,提示很清楚啊

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧