A code-first path off SQL Server Integration Services

A C# replacement for SSIS

SSIS is still fast. It is no longer where Microsoft invests. ETLBox keeps the Control Flow / Data Flow split you already know — as C# you can diff, test, and ship in CI.

A lot of production ETL still lives in SSIS because the engine is fast and operators know how to restart a package. New product energy sits in Azure Data Factory, Synapse, and Fabric. The expensive moment is the one where a cloud move or a hiring constraint forces the question, and the only packages you have are designer canvases. ETLBox is the code-first way out — not another designer.

SSIS

Same mental model. Different medium.

Control Flow is everything around the stream: create tables, truncate staging, run SQL, write counts. Data Flow is source → transform → destination, with a second path for rows that should not land. In ETLBox that is SqlTask around a linked network of components, started with Network.Execute. The toolbox jobs stay. The package becomes C#.

ETLBox

The package is code

  • Git diffs you can review
  • Unit tests and CI/CD
  • Streaming engine and bulk loads
  • Lookup, split, merge join, multicast
  • Runs anywhere .NET runs
SSIS

The package is a canvas

  • A .dtsx diff is XML, not a reviewable patch
  • Script Components nobody runs in a test
  • Fast engine, stalled product
  • One extra Lookup rearranges the canvas
  • Tied to SQL Server / Integration Runtime
ADF

ADF is the official successor. It is not the better designer.

For cloud-native, mostly linear pipelines, Azure Data Factory is a reasonable default. That is not the shape of most long-lived SSIS estates. Those packages are dense: Execute SQL around a Data Flow, lookups with no-match outputs, row redirection, Script Components because the toolbox cannot express the rule. Mapping Data Flows make that awkward. The SSIS Integration Runtime is a bridge so existing packages can keep running in Azure. It is not a destination.

ETLBox

Leave the designer

  • C#, not a second expression language
  • The same Control Flow / Data Flow split
  • Range lookups the SSIS toolbox cannot do
  • Debug in Visual Studio or Rider
  • On-prem, cloud, or a container — your call
ADF

Swap one canvas for another

  • Heavier UI, slower debugging
  • Still a canvas as the unit of reuse
  • Awkward for lookup-heavy SSIS work
  • Integration Runtime is a holding pattern
  • Does not fix Git, tests, or maintainability

Why AI actually helps here

A .dtsx package is a designer canvas serialized as XML. AI is weak at that. It is strong at C#. Once the flow is code, you can ask a model to draft a lookup, add a test, or review a PR — and you can still compile the result. That is the practical reason a code-first migration moves faster than redrawing the same package in ADF: the work is text a model can hold on to.

This is not an automated .dtsx importer. You rewrite the package in C# with the same components. AI is useful because that rewrite is code, not because a wizard hides the designer.

SSIS toolbox → ETLBox

The components production packages actually spend time in. Not every SSIS item (Fuzzy Lookup, DQS, the SCD wizard) has a one-click twin.

SSISETLBox
Execute SQL / Truncate TableSqlTask, TruncateTableTask
Flat File SourceCsvSource
Derived Column / Script ComponentRowTransformation
LookupLookupTransformation
Conditional SplitLinkTo(..., predicate) or ConditionalSplit
OLE DB DestinationDbDestination
Error outputa second LinkTo predicate, or LinkErrorTo
ForEach Filea C# foreach over files, or HasNextUri on a source
Aggregate / Sort / Pivot / Merge Join / MulticastAggregation, Sort, Pivot, MergeJoin, Multicast

A full Control Flow and Data Flow — partner CSV, customer lookup, range lookup the SSIS Lookup transform cannot do, staging merge, error file — is in the walkthrough: Replacing SSIS with a C# data flow.

Used in production — not as a weekend project

Commonwealth Bank of Australia, Deloitte, Health Catalyst, SEW Eurodrive, Calpine, FASTEC. Teams run ETLBox because a nightly load has to survive the next decade of package changes, not the next designer.

Evaluate the code-first path

Keep the engine. Drop the canvas.

A trial key unlocks the full library. NuGet without a key is limited to 5,000 rows per data flow. If you want the packages rewritten with you, the people who built ETLBox take that work.

Get a free trial key Read the walkthrough Need us to migrate it?

Commonwealth Bank of Australia
Australia

Brunata
Denmark

Deloitte
Ireland, India

IWG
Switzerland

National Bank of Serbia
Serbia

Flowwright
USA

FASTEC
Germany

Calpine Energy Solutions
USA

Digitain
Armenia

Health Catalyst
USA

Regal Rexnord
USA, Mexiko

Normandin Beaudry
Canada

Djøf
Denmark

ATD Solutions Ltd.
U.K.