首页 新闻 赞助 找找看

批量更新 插入 传递SqlParameter的问题 大侠过来看看吧

0
悬赏园豆:30 [已解决问题] 解决于 2012-08-09 10:15

批量更新的时候 传递 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);???

大侠们明白了我的意思吗?

KyrieYang的主页 KyrieYang | 菜鸟二级 | 园豆:205
提问于:2012-08-06 18:18
< >
分享
最佳答案
0
首先你那个更新的事务没设计好,基本上就两条语句的事情,你整多了,直接把两条语句使用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();  。。。。。

收获园豆:16
土豆屋 | 菜鸟二级 |园豆:354 | 2012-08-06 21:50

这个不防止sql注入式攻击。。

KyrieYang | 园豆:205 (菜鸟二级) | 2012-08-09 10:08

打错了 这个也可以 不过我解决了 谢谢了!

KyrieYang | 园豆:205 (菜鸟二级) | 2012-08-09 10:10
其他回答(3)
0

貌似没这么复杂吧。。。

收获园豆:2
Angkor--:-- | 园豆:1086 (小虾三级) | 2012-08-06 23:59
0

好长的批量更新语句啊,看的都晕了。

收获园豆:2
jerry-Tom | 园豆:4077 (老鸟四级) | 2012-08-07 10:53
0

第一一个数组 把SqlParameter添加进去 在把数组传化成SqlParameter

收获园豆:10
s_p | 园豆:138 (初学一级) | 2012-08-09 10:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册