当前位置: 首页 > 面试题库 >

NET中如何对多个SqlConnection使用单个SqlTransaction?

林铭
2023-03-14
问题内容
  1. 我有SQL Server 2000, 它不支持MultipleActiveResults
  2. 我必须进行多次插入,并且每次插入都要进行一次连接。
  3. 我想在所有插入之前开始一个事务,并在所有插入之后完成它。
  4. 我该怎么做?

问题答案:

您不使用一个连接和多个命令(实际上是在循环中重新创建一个命令)的原因是什么?也许此解决方案将为您工作:

   public static void CommandExecNonQuery(SqlCommand cmd, 
       string query, SqlParameter[] prms)
    {
        cmd.CommandText = query;
        cmd.Parameters.AddRange(prms);
        cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
    }

    static void Main(string[] args)
    {
        string insertQuery = 
           @"INSERT TESTTABLE (COLUMN1, COLUMN2) " + 
             "VALUES(@ParamCol1, @ParamCol2)";
        using (SqlConnection connection = 
          new SqlConnection(connectionString))
        {
            using (SqlCommand command = 
              connection.CreateCommand())
            {
                SqlTransaction transaction = null;
                try
                {
                    // BeginTransaction() Requires Open Connection
                    connection.Open();

                    transaction = connection.BeginTransaction();

                    // Assign Transaction to Command
                    command.Transaction = transaction;
                    for (int i = 0; i < 100; i++)
                        CommandExecNonQuery(command, insertQuery, 
                          new SqlParameter[] { 
                            new SqlParameter("@ParamCol1", i), 
                            new SqlParameter("@ParamCol2", i.ToString()) });
                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                    throw;
                }
                finally
                {
                    connection.Close();
                }
            }
        }
    }

另请参见
Sql Server事务-ADO.NET 2.0-提交和回滚-使用语句-
IDisposable



 类似资料:
  • 问题内容: 我想确定显示点集合所需的最小面积。最简单的方法是像这样遍历整个集合: 我开始了解流。为此,您可以执行以下操作: 两者给出相同的结果。但是,尽管流方法很优雅,但速度却慢得多(如预期的那样)。 有没有办法让,,并在一个单一的流操作? 问题答案: 与类推,创建一个收集所需信息的类。它定义了两种方法:一种用于记录a的值,一种用于组合两个的值。 然后,您可以将收集到中。 更新 我完全对 OP得出

  • 另外,我不明白当我们只调用bind()而不调用sync()时会发生什么。服务器是否以某种方式继续运行?我们如何优雅地关闭它? 很明显,我对这一切的工作原理感到非常困惑,可悲的是,在这方面缺乏完整的文档。任何帮助都将不胜感激。

  • 问题内容: 我正在使用NEST库与ElasticSearch进行交互,并且试图找到一种基于非类型数据构建索引类型/嵌套对象的方法。该类型具有以下基本结构。 我想为NestedType的每个实例创建一个嵌套的对象/类型。因此,如果有两个NestedType实例,则将有两个嵌套对象。我可以从DynamicObject继承NestedType,将字典变成NEST然后正确映射的“真实”属性(即,将每个字典

  • 我基本上一直在尝试通过使用JFrame并切换出2个JPanel(一个用于菜单,一个用于实际游戏)来为游戏制作菜单。我正在尝试实现我能想到的最基本的格式,但似乎无法让它工作。如果有人能解释代码的错误,我将不胜感激。 这是我的JFrame、菜单面板和ActionListener actionPerformed调用在此类中创建的面板 同样,如果有人能向我解释一下这段代码的错误,我将不胜感激。谢谢

  • 我试图在OpenGL中使用多个VAO和VBO渲染多个对象。使用相同的顶点渲染多个对象我已经做过了,但是我想做的是为每个对象使用不同的顶点,例如画一个正方形和一个圆形。对于一个正方形,我只需要6个顶点,但是对于圆,我需要360个顶点。我有阅读或创建着色器的错误。 以下是顶点着色器: 片段着色器: VAO和VBO的生成与绑定 以及渲染循环中的绘制调用: 我重复一遍,用我做过的相同顶点绘制多个对象。我需

  • 如果我向Drools引擎添加一个事实,我有一组正确工作的Drools规则,如果我添加两个事实,这些规则只应用于第一个事实。如何使规则集适用于多个事实? 我的可追踪事实: 我的规则集: 失败的测试用例: