批量更新的时候 传递 SqlParameter的问题:
代码如下:
string[] sql = new string[4]; StringBuilder str = new StringBuilder(); str.Append(@" update A_ObjectInfo set ObjectRegNum=@ObjectReg "); str.AppendFormat(@" where ObjectID='{0}'", ObjectID); SqlParameter[] spr = new SqlParameter[]{ new SqlParameter("@ObjectReg",SqlDbType.VarChar,50) }; spr[0].Value = ObjectInfoModel.A_ObjectRegNum; sql[0] = str.ToString(); str.Clear(); str.Append(@" update A_RegisterModel set Writer=@Writer,WriteDate=@WriteDate,ContractNo=@ContractNo,ServiceFee=@ServiceFee "); str.AppendFormat(@" where ObjectID='{0}'", ObjectID); SqlParameter[] spr1 = new SqlParameter[]{ new SqlParameter("@Writer",SqlDbType.VarChar,50), }; spr1[0].Value = RegisterModel.A_Writer; sql[1] = str.ToString(); str.Clear(); return Commit.Commit.executeTransaction(sql,????); ???代码是 SqlParameter(有2个)的
executeTransaction的代码:
bool flag = false; SqlCommand cmd = new SqlCommand(); cmd.Connection = _con;//命令对象 SqlTransaction myTransaction;//声明一个SQL事物类型 myTransaction = con.BeginTransaction();//基于一个连接初始化事物 try { foreach (string sql in strSql)//遍历 { cmd.Transaction = myTransaction;//指定SQL命令语句 的事物 cmd.CommandText = sql;//给定命令语句 if (values != null) { foreach (SqlParameter parameter in values) { if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null)) { parameter.Value = DBNull.Value; } cmd.Parameters.Add(parameter); } } cmd.ExecuteNonQuery();//执行SQL语句 } myTransaction.Commit(); flag = true; } catch (Exception ex)
我如何把SqlParameter传递过去 并且执行的时候添加对应的 cmd.Parameters.Add(parameter);???
大侠们明白了我的意思吗?
首先你那个更新的事务没设计好,基本上就两条语句的事情,你整多了,直接把两条语句使用AppendFormat()拼接在一起,然后统一添加参数,最后统一执行事务,你那个executeTransaction()的 foreach (string sql in strSql)貌似多了。。。。
第一步:添加SQL参数数组:
StringBuilder str = new StringBuilder(); str.AppendFormat(@" update A_ObjectInfo set ObjectRegNum=@ObjectReg where ObjectID='{0}' ", ObjectID); str.AppendFormat(@" update A_RegisterModel set Writer=@Writer,WriteDate=@WriteDate,ContractNo=@ContractNo,ServiceFee=@ServiceFee where ObjectID='{0}'", ObjectID); SqlParameter[] spr = { new SqlParameter("@ObjectReg",SqlDbType.VarChar,50), new SqlParameter("@Writer",SqlDbType.VarChar,50), // new SqlParameter("@WriteDate",SqlDbType.VarChar,50) //new SqlParameter("@ContractNo",SqlDbType.VarChar,50) //new SqlParameter("@ServiceFee",SqlDbType.VarChar,50) }; spr[0].Value = ObjectInfoModel.A_ObjectRegNum; spr[1].Value = RegisterModel.A_Writer;
第二步:执行SQL的事务。。。
cmd.Connection = _con;//命令对象 SqlTransaction myTransaction;//声明一个SQL事物类型 myTransaction = con.BeginTransaction();//基于一个连接初始化事物 cmd.Transaction = myTransaction;//指定SQL命令语句 的事物 cmd.CommandText = str.ToString();//给定命令语句 cmd.Parameters.AddRange(spr);//添加SQL参数
cmd.ExecuteNonQuery(); 。。。。。
这个不防止sql注入式攻击。。
打错了 这个也可以 不过我解决了 谢谢了!
貌似没这么复杂吧。。。
好长的批量更新语句啊,看的都晕了。
第一一个数组 把SqlParameter添加进去 在把数组传化成SqlParameter