请教大神 这个事务该怎么实现

zyy2010 2013-04-03 04:52:45
我现在的代码如下:

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命令中
}
}
}
}

这是我网上下载的代码 然后改的 我想实现一次插入多条记录,这个该怎么修改,求大神指点,感激不尽...
...全文
130 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoppo0505 2013-04-03
  • 打赏
  • 举报
回复
你这个还是单个事务提交,每次提交的事务还是只有执行一次CommandText中的内容。修改之前和之后基本没有区别。 如果你提交一次事务,需要插入多行数据,有三种方法: 1. 提交一次的事务中,就是CommandText进行拼接。 2. 将单个CommandText的事务建立sqlcommand之后,将多个sqlcommand一次性提交,这个你需要大量改写程序,建立新类等很多工作,Sqlcommand 没有batch操作。对你来说可能过于复杂 3. 将要插入的数据放入表格,再在数据库自定义表格变量用于参数提交。对你来说也可能过于复杂。 就目前来说,你这个模式是基本模式。性能上稍微差点,但是如果数据不多,就没有什么区别。
水族杰纶 2013-04-03
  • 打赏
  • 举报
回复
.NET版问下吧
zyy2010 2013-04-03
  • 打赏
  • 举报
回复
原来执行单个任务的代码为:

public static int ExecuteNonQuery(string CommandText, params Parameter[] Params)
        {
            if (Sconn == null)
            {
                Sconn = getSqlConnection();
            }
            if (Sconn.State != ConnectionState.Open)
            {
                Sconn.Open();
            }
            SqlCommand cmd = new SqlCommand(CommandText, Sconn);
            AddParameter(ref cmd, Params);
            SqlTransaction transaction = Sconn.BeginTransaction(); //在事务中执行sql语句
            cmd.Transaction = transaction;
            bool flag = false;
            try
            {
                cmd.ExecuteNonQuery();
                transaction.Commit();
                flag = true;
            }
            catch (Exception ex1)
            {
                transaction.Rollback();
                flag = false;
                throw new Exception(ex1.Message);
            }
            finally
            {
               //
            }
            return (flag ? 0 : -2);
        }
大神帮忙啊

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧