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.
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#.
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
The package is a canvas
- A
.dtsxdiff 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 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.
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
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.
| SSIS | ETLBox |
|---|---|
| Execute SQL / Truncate Table | SqlTask, TruncateTableTask |
| Flat File Source | CsvSource |
| Derived Column / Script Component | RowTransformation |
| Lookup | LookupTransformation |
| Conditional Split | LinkTo(..., predicate) or ConditionalSplit |
| OLE DB Destination | DbDestination |
| Error output | a second LinkTo predicate, or LinkErrorTo |
| ForEach File | a C# foreach over files, or HasNextUri on a source |
| Aggregate / Sort / Pivot / Merge Join / Multicast | Aggregation, 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?




