title: Inner Transactionscope error: "Communication with the underlying transaction manager has failed"
body: <p>I am not sure I am doing any of this correctly. Is it because I am opening two connections? I am closing them regardless of errors. I did try putting in some inner transaction scopes and setting the second one to <code>RequiresNew</code>. The two methods are independent of each other, however, if one fails I need them both to rollback. I may have to modify how I am creating and closing the connections, I feel. Any thoughts? Here is some example code of what I am doing:</p>
  
  <pre><code>Public Sub TransMethod()
      Using sTran As New Transactions.TransactionScope
          factory1.UpdateMethod(someObject1)
          facotry2.insert(someobject2)
          sTran.Complete()
      End Using
  End Sub
  
  Public Class factory1
      Public Shared Sub UpdateMethod(obj)
          dim someSQLParams....
          DataAcces.ExecuteNonQuery(command,someSQLParams)
      End Sub
  End Class
  
  Public Class factory2
      Public Shared Sub Insert(obj)
          dim someSQLParams....
          DataAcces.ExecuteNonQuery(command,someSQLParams)
      End Sub
  End Class
  
  Public Function ExecuteNonQuery(ByVal spname As String, _
          ByVal ParamArray parameterValues() As Object) As Object
      Dim connection As SqlConnection = Nothing            
      Dim command As SqlCommand = Nothing
      Dim res As Object = Nothing
      Try
          connection = New SqlConnection(_connectionString)
          command = New SqlCommand(spname, connection)
          command.CommandType = CommandType.StoredProcedure
          command.Parameters.AddRange(parameterValues)
          connection.Open()
          command.ExecuteNonQuery()
          res = command.Parameters(command.Parameters.Count - 1).Value
      Catch ex As Exception
          CreateDataEntry(ex, WriteType.ToFile, spname)
          If Not (transaction Is Nothing) Then
              transaction.Rollback()
          End If
      Finally
          If Not (connection Is Nothing) AndAlso _
              (connection.State = ConnectionState.Open) Then _
                  connection.Close()
          If Not (command Is Nothing) Then command.Dispose()
      End Try
      Return res
  End Function
  </code></pre>