/// <summary>
193         /// 执行数据库事务
194         /// </summary>
195         /// <param name="sqlStringList"></param>
196         public void ExecuteTransaction(System.Collections.ArrayList sqlStringList)
197         {
198             Connection.Open();
199             DbTransaction tran = Connection.BeginTransaction();
200             DbCommand Command = BuildInitCommand();
201             Command.Transaction = tran;
202             try
203             {
204                 for (int i = 0; i < sqlStringList.Count; i++)
205                 {
206                     Command.CommandText = sqlStringList[i].ToString();
207                     Command.ExecuteNonQuery();
208                 }
209                 tran.Commit();
210                 Connection.Close();
211             }
212             catch (System.Data.Common.DbException E)
213             {
214                 tran.Rollback();
215                 throw new Exception(E.Message);
216             }
217         }
218     }
事务处理函数只能执行纯SQL语句,如果想同时执行纯sql语句和带参的SQL语句,则不行。该如何改。请高手们指教???

解决方案 »

  1.   

    sqlStringList 这里传的sql语句 之前就可以做下处理。
      

  2.   

    有很多条会一起执行,必须放在同一个事务里,但是在一条语句里有些字段允许为NULL,也就是不填。
    如果是拼接式SQL的话执行会出错的,只能是参数式。
      

  3.   

    参数式的可以用System.DBNull.value
    拼接式就是空啦
      

  4.   

    1楼不是说了嘛,先构造你的sql语句列表,然后就跟不带参数一样执行了
      

  5.   

    楼主看看这个是不是符合你的需求  string sql1 = string.Format("SELECT * from a WHERE Id={0}",DBNull.Value);
            string sql2 = "SELECT * from a";
            ArrayList sqlStringList = new ArrayList();
            sqlStringList.Add(sql1);
            sqlStringList.Add(sql2);
            ExecuteTransaction(sqlStringList);
      

  6.   

    带参SQL语句,有必要自己写个存储过程