C# 事物(Transaction)处理时,向一个表里面写入多行记录时出错:参数变量名重复

问题描述

我的代码如下:///<summary>///sql事务处理///</summary>///<paramname="sqlString">sql查询字符串数组A</param>///<paramname="sqlparam">对应A的相应的SqlParameter[]的ArrayList对象</param>///<returns>返回的字符串为该方法出现异常的描述,当它为空则表示执行成功</returns>publicstaticstringExecuteSqlTransaction(string[]sqlString,ArrayListsqlparam){using(SqlConnectionconnection=newSqlConnection(_sqlConStr)){stringexStr="";connection.Open();System.Data.SqlClient.SqlCommandcommand=connection.CreateCommand();System.Data.SqlClient.SqlTransactiontransaction;//Startalocaltransaction.transaction=connection.BeginTransaction("myTransaction");//Mustassignbothtransactionobjectandconnection//toCommandobjectforapendinglocaltransactioncommand.Connection=connection;command.Transaction=transaction;try{for(inti=0;i<sqlString.Length;i++){//得到sql的查询字符串command.CommandText=sqlString[i].ToString();//得到对应该查询字符串的SqlParameter[]SqlParameter[]_param=(SqlParameter[])sqlparam[i];for(intj=0;j<_param.Length;j++){command.Parameters.Add(_param[j]);}command.ExecuteNonQuery();}//Attempttocommitthetransaction.transaction.Commit();//Console.WriteLine("Bothrecordsarewrittentodatabase.");}catch(Exceptionex){//Console.WriteLine("CommitExceptionType:{0}",ex.GetType());//Console.WriteLine("Message:{0}",ex.Message);//Attempttorollbackthetransaction.exStr=ex.ToString();try{transaction.Rollback();}catch(Exceptionex2){exStr=ex2.ToString();//Thiscatchblockwillhandleanyerrorsthatmayhaveoccurred//ontheserverthatwouldcausetherollbacktofail,suchas//aclosedconnection.//Console.WriteLine("RollbackExceptionType:{0}",ex2.GetType());//Console.WriteLine("Message:{0}",ex2.Message);}}returnexStr;}//插入定单,并插入指定数量的货物(事物处理)publicstringINSERT_TransportOrdersAndGoods(TransportOrdersInfotOrdersInfo,ArrayListgoodsParam){intgoodsCounts=goodsParam.Count;//得到查询字符串的数组string[]_sqlQueryArry=newstring[goodsCounts+1];_sqlQueryArry[0]=SQL_INSERT_TransportOrders;for(inti=0;i<goodsCounts;i++)_sqlQueryArry[i+1]=SQL_INSERT_Goods;//得到查询字符串的数组对应的参数ArrayList_sqlparam=newArrayList();_sqlparam.Clear();_sqlparam.Add(GetINSERTParam(tOrdersInfo));GoodsInfo_myGoodsInfo;for(inti=0;i<goodsCounts;i++){_myGoodsInfo=(GoodsInfo)goodsParam[i];_sqlparam.Add(Get_GoodsExceptIDParam(_myGoodsInfo.GoodsName,_myGoodsInfo.IsPackete,_myGoodsInfo.Amount,_myGoodsInfo.Volume,_myGoodsInfo.Weight,_myGoodsInfo.Premium,_myGoodsInfo.TransportOrdersID));}//执行事务string_exceptionStr=Utility.ExecuteSqlTransaction(_sqlQueryArry,_sqlparam);return_exceptionStr;}这是参数定义:privateSqlParameter[]Get_GoodsExceptIDParam(stringgoodsName,boolisPackete,intamount,stringvolume,stringweight,decimalpremium,stringtransportOrdersID){SqlParameter[]_param=newSqlParameter[]{newSqlParameter(PARAM_GoodsName,SqlDbType.NVarChar),newSqlParameter(PARAM_IsPacket,SqlDbType.Bit),newSqlParameter(PARAM_Amount,SqlDbType.Int),newSqlParameter(PARAM_Volume,SqlDbType.NVarChar),newSqlParameter(PARAM_Weight,SqlDbType.NVarChar),newSqlParameter(PARAM_Premium,SqlDbType.Money),newSqlParameter(PARAM_TransportOrdersID,SqlDbType.NVarChar)};_param[0].Value=goodsName;_param[1].Value=isPackete;_param[2].Value=amount;_param[3].Value=volume;_param[4].Value=weight;_param[5].Value=premium;_param[6].Value=transportOrdersID;return_param;}//插入货物记录privateconststringSQL_INSERT_Goods="insertintogoodsInfo(goodsName,isPacket,amount,volume,weight,premium,transportOrdersID)values(@goodsName,@isPacket,@amount,@volume,@weight,@premium,@transportOrdersID)";现象:当只插入一个货物时,它正常工作,当插入2行时就报错:{"Thevariablename'@goodsName'hasalreadybeendeclared.Variablenamesmustbeuniquewithinaquerybatchorstoredprocedure."}如何来解决它啊!

解决方案

解决方案二:
ding~~~~~~~~~~~~
解决方案三:
高手帮忙啊!
解决方案四:
参数清空:cmd.Parameters.Clear()

时间: 2024-09-01 15:14:14

C# 事物(Transaction)处理时,向一个表里面写入多行记录时出错:参数变量名重复的相关文章

关于修改DataGridView行记录时的光标乱跳的问题,困惑很久了,特求解

问题描述 在一个DataGridView里绑定的数据源是一个DataView,里面的记录按时间排序.在我的程序处理中,当接受到一个消息时,希望将特定的行记录进行修改,更新其时间,这一行记录也会自动排序到最后.这些都没有什么问题,目前的问题是,如果本来选定了一行记录,假设总共有50条记录,本来手工选中了第5条记录,这时消息来了,修改第36行记录,第36行记录因为时间修改变成第49行记录,光标应该仍然选中第5行记录,但事实是,光标跳向了第36行记录,既不是原先选中的记录,也不是被修改的那条记录.消息

ORACLE:写Function时,传入参数变量名的注意事项

oracle中开发人员写自己的sql function时,入口参数名不要与select中table的字段名重复,否则虽然编译能正常通过,但运行的结果往往是错误的. 示例: 1 CREATE OR REPLACE FUNCTION S_GET_EMP_NAME(EMPNO nvarchar2) return nvarchar2 is 2 ENAME nvarchar2(100); 3 begin 4 SELECT E.ENAME 5 INTO ENAME 6 FROM EMP E 7 WHERE

mysql中插入记录时不存在时插入已经存在则更新

如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执 行旧行UPDATE.例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果: 代码如下:  代码如下 复制代码 mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=c+1; mysql> UPDATE table SET

谁有给每行记录增加一个右键菜单的代码?

问题描述 谁有一个列表中给每行记录增加一个右键菜单的代码?最好是jquery的 谢谢了 解决方案 http://www.cssrain.cn/demo/contextmenu/contextmenu.html这有实例,是jquery的

pb 饼图-pb制作饼图时如何让表里的字段名显示在饼图上

问题描述 pb制作饼图时如何让表里的字段名显示在饼图上 例如:我有一张表,表里有医生态度.护士态度两个字段,现在我要让饼图根据医生态度和护士态度的总分来划分比例,如何让这两个字段显示在饼图上. 解决方案 在窗口上放一个graph控件gr_1,增加一个按钮cb_1,在cb_1里写以下代码 integer SeriesNbr gr_1.AddSeries("data") SeriesNbr = gr_1.FindSeries("data") gr_1.AddData(S

sql数据库 当一张表的内容添加一条时 写一个触发器 使其自动再生成一张

问题描述 sql数据库 当一张表的内容添加一条时 写一个触发器 使其自动再生成一张 1C sql数据库 当一张表的内容添加一条时 写一个触发器 使其自动再生成一张表 但自动生成的表的名字需要是添加的这个表的一个字段的内容 比如说表中添加了一个成员的名字 需要自动生成的表的名字就是这个人名 解决方案 需求可以实现,但没有这么去做的,这个表里有10000条数据时,你生成1万张表???? 建议修改设计,改成其它的方案来实现 解决方案二: Sql Server数据库新增触发器里面可以通过select (

装SDK时遇到一个非常奇怪的问题,各位都来瞧一瞧,指点一下

问题描述 装SDK时遇到一个非常奇怪的问题,各位都来瞧一瞧,指点一下 装Android4.0以上的时候没有任何问题,但是装4.0以下版本全部显示与windows不兼容.....这是什么鬼?以前从未遇到过啊 解决方案 集成tiles3时遇到的问题mark一下 解决方案二: http://blog.csdn.net/pathuang68/article/details/8233107

编写执行你的第一个Yukon CLR(通用语言运行时)存储过程

存储过程|执行 编写执行你的第一个Yukon CLR(通用语言运行时)存储过程 作者:Suhil Srinivas 翻译:朱二 原文出处:http://www.c-sharpcorner.com/Longhorn/Yukon/First-CLR-Procedure.asp 描述这篇文章描述了种种编写和执行一个Yukon CLR 通用语言运行时存储过程的步骤.对开发混合数据类型的SQL 存储过程来说,本文也是一个起点.需求正确安装SQL Server Yukon beta1介绍Yukon 是微软公

ASP.NET 2.0数据教程之五十六:添加新记录时包含一个文件上传选项

返回"ASP.NET 2.0数据教程目录" 导言: 在前面2节教程,我们探讨了如何使用FileUpload控件从客户端 向服务器上传文件,以及如何在数据Web控件里显示二进制数据. 在本节 ,我们将创建一个web页面以添加新的种类.除了为类的name和description属性 添加TextBoxes控件外,我们还要在页面上添加2个FileUpload控件 --一个用来上传新类的图片,另一个用来上传类的小说明册子.上 传的图片将直接存储在新记录的Picture列.与此相反,小册子将存储