首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问大神 这个事务该如何实现

2013-04-20 
请教大神 这个事务该怎么实现我现在的代码如下: public static int ExecuteAsTransaction(string CommandT

请教大神 这个事务该怎么实现
我现在的代码如下:


 public static int ExecuteAsTransaction(string CommandText, List<Parameter[]> ParamsList)
        {
            //...省略部分代码 已经获取连接Sconn
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = Sconn;
            SqlTransaction transaction = Sconn.BeginTransaction(); //开始事务            cmd.Transaction = transaction;
            bool flag = false;
            try
            {
                foreach (Parameter[] Params in ParamsList)
                {
                    AddParameter(ref cmd, Params); //增加参数
                    cmd.CommandText = CommandText;
                    cmd.ExecuteNonQuery();
                }
                transaction.Commit();
                flag = true;
            }
            catch (Exception ex1)
            {
                transaction.Rollback();
                flag = false;
                throw new Exception(ex1.Message);
            }
            finally
            {
               //            
            }
            return (flag ? 0 : -2);
        }


其中增加参数的函数如下:

private static void AddParameter(ref SqlCommand Cmd, params Parameter[] Params)
        {
            //如果SqlCommand对象和参数列表不为空,则进行添加参数操作
            if ((Params != null) && (Cmd != null))


            {
                for (int i = 0; i < Params.Length; i++)
                {
                    if (Params[i] != null) //判断参数是否为空
                    {
                        SqlParameter parameter = new SqlParameter();
                        parameter.ParameterName = Params[i].Name.StartsWith("@") ? Params[i].Name : ("@" + Params[i].Name); //哪果参数没有以"@"开头,则手动添加上"@"符号
                        parameter.SqlDbType = DbType2SqlDbType(Params[i].Type); //设置参数类型
                        if (Params[i].Size > 0)
                        {
                            parameter.Size = Params[i].Size; //设置参数大小
                        }
                        parameter.Direction = Params[i].Direction; //设置参数方向
                        //如果参数方向为"输入" 或者 "输入输出"并且参数不为空,则为参数的 Value属性赋值
                        if (((Params[i].Direction == ParameterDirection.InputOutput) || (Params[i].Direction == ParameterDirection.Input)) && (Params[i].Value != null))
                        {
                            parameter.Value = Params[i].Value;
                        }
                        Cmd.Parameters.Add(parameter); //将参数添加到SqlCommand命令中
                    }
                }
            }
        }


这是我网上下载的代码 然后改的 我想实现一次插入多条记录,这个该怎么修改,求大神指点,感激不尽...

事务
[解决办法]
你这个还是单个事务提交,每次提交的事务还是只有执行一次CommandText中的内容。修改之前和之后基本没有区别。

如果你提交一次事务,需要插入多行数据,有三种方法:
1. 提交一次的事务中,就是CommandText进行拼接。
2. 将单个CommandText的事务建立sqlcommand之后,将多个sqlcommand一次性提交,这个你需要大量改写程序,建立新类等很多工作,Sqlcommand 没有batch操作。对你来说可能过于复杂
3. 将要插入的数据放入表格,再在数据库自定义表格变量用于参数提交。对你来说也可能过于复杂。

就目前来说,你这个模式是基本模式。性能上稍微差点,但是如果数据不多,就没有什么区别。

热点排行