问题描述
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;//提交事务