1/2

Database Migration Assessment | Live Webinar

2/2

Meet SQLWays AI Assistant | Learn more

Convert PowerBuilder to C#

Delivering you a high-quality result in due time

Get started. Request a quote

Many companies have used our tools and provided excellent feedback on their performance


Conversion opportunities with Ispirer

Ispirer Ecosystem automates your migration routine to enable quick and smart transformation of any application. Double the migration speed with our comprehensive solutions.

  • With CodeWays only

    • Free Metrics tool to analyze the migration complexity
    • Assistance in CodeWays configuration
    • Automated migration of the entire application including project files, business logic, GUI and database API
    • Prompt customization of the tool to maximize automation rate
    • Expert support
  • With CodeWays as a part of migration service

    • Tailored migration roadmap from assessment through migration and testing to cutover
    • Automated migration of the entire application, including project files, business logic, GUI and database API
    • Team of experts skilled in application conversion
    • Assistance in deployment, integration, performance optimization, and new feature development

Unleash the reinforced application
Save your time

Book a demo

Do it for 5 minutes

Our modernization and migration approach

We select the right conversion approach based on business specifics, project scope, complexity, and risk profile.

  • Rule-Based

    Deterministic conversion

    Engine

    SQLWays, CodeWays

    Automation & coverage

    ~70–80% automated coverage out of the box, with the option to reach up to 90% through manual refinement, refactoring, validation, and QA

    What you get

    Predictable scope and timeline, stable and repeatable output

    Best for

    Well-defined, structured migrations

  • Recommended

    Hybrid

    Rules + AI-assisted refinement

    Engine

    SQLWays, CodeWays + AI

    Automation & coverage

    ~70–80% automated coverage, up to 90% with AI, reducing manual conversion, validation, and testing

    What you get

    Predictability of the rule-based engine + speed of AI, backed by the Ispirer expert framework

    Best for

    Complex or partially undocumented systems

  • AI-Driven

    AI-led analysis and delivery

    Engine

    AI engine

    Automation & coverage

    AI-led code and business logic extraction by Ispirer Migration Experts

    What you get

    AI-assisted refactoring, code generation and documentation, human-led QA, insights into undocumented logic and target design

    Best for

    Iterative modernization and innovation-driven transformation

The approach is defined during the Discovery Phase, based on business specifics, source system complexity, target state, timeline, and expected business value.

CodeWays for automated app conversion

CodeWays is a tool for automated application conversion that translates code from one programming language to another automatically, while preserving the initial functionality of an app. Using an intelligent proprietary algorithm, the tool analyzes the syntax, semantics, mapping data types, control structures, function calls, and code structures that do not have equivalents in a target technology.

Based on the analysis, CodeWays applies all the relevant conversion rules from its knowledge base core and translates PowerBuilder source code to C#.

It takes 5 min to start your application conversion journey!

App source code & App source code with embedded SQL*

  • Informix4GL
  • Delphi
  • Cobol
  • VisualBasic
  • Progress4GL
  • PowerBuilder
  • C/C++

Any files with SQL code

  • Informix
  • Teradata
  • SQLServer
  • Oracle
  • IBM DB2
  • SAP Sybase
  • PostgreeSQL
  • MySQL
  • Greenplum
  • MariaDB
  • Firebird
How Codeways work
  • App target code

    App target code
  • App target code with converted ESQL

    App target code with converted ESQL
  • Files with SQL code for the target DB

    Files with SQL code for the target DB

*Embedded SQL are SQL statements written inline with the program source code, of the host language.

Convert Smarter. Evolve Faster

Over 150 ways to migrate
Give it a try now. Book a demo

Dive into tool’s features

  • Delphi
  • Cobol
  • Progress 4GL
  • C#
  • PowerBuilder
  • C\C++
  • Pascal
  • .Net
  • Informix 4GL
  • Python
  • Delphi
  • Cobol
  • Progress 4GL
  • C#
  • PowerBuilder
  • C\C++
  • Pascal
  • .Net
  • Informix 4GL
  • Python
  • Delphi
  • Cobol
  • Progress 4GL
  • C#
  • PowerBuilder
  • C\C++
  • Pascal
  • .Net
  • Informix 4GL
  • Python
  • Delphi
  • Cobol
  • Progress 4GL
  • C#
  • PowerBuilder
  • C\C++
  • Pascal
  • .Net
  • Informix 4GL
  • Python

Migration is always a risky plan. You ain't come to this decision overnight. Most often, an aging-out system or a deadline you can no longer move triggers it. When clients approach us, those triggers cause severe pain. Our goal is to tailor a custom solution to address it. If they need a product, we have a toolkit. If they want guidance, we have experts. Much of my job is making sure the Ispirer team doesn't wait for a trigger to hit you down, but shows up at the exact moment to help you out.

Elizabeth Shydlovich Head of Marketing Department (HMD), Ispirer Systems

Photo of Elizabeth Shydlovich, Head of Marketing Department (HMD) of Ispirer Systems

Check out how Ispirer Toolkit automatically converts PowerBuilder application

Migration demo

PowerBuilder to C# conversion service overview

More than 2K users use this way to
successfully convert their application code

Start

Assessment

  • Collecting info about an application
  • Analyzing the application and its components
  • Making migration plan

Automated APP conversion

  • Entire APP conversion
  • APP changes (API, ESQL)
  • Tool configuration and customization for specific APP

Manual APP conversion

  • Manual code review and debugging
  • Replacing custom controls, libraries, methods, etc. with analogues
  • Developing remaining solutions using target technology

Functional testing

  • APP analysis and test documentation creation
  • Testing the application against test documentation
  • Fixing issues

Acceptance testing

  • Testing the APP against business requirements
  • Fixing issues

Cutover

  • Switching APP
  • System startup assisstance
  • Collecting info about an APP
  • Analyzing the APP and its components
  • Making migration plan
  • Entire APP conversion
  • APP changes (API, ESQL)
  • Manual code review and debugging
  • Replacing custom controls, libraries, methods, etc. with analogues
  • Developing remaining solutions using target technology
  • APP analysis and test documentation creation
  • Testing the application against test documentation
  • Fixing issues
  • Testing the APP against business requirements
  • Fixing issues
  • Switching APP
  • System startup assistance

Conversion Samples of PowerBuilder to C# WPF

Ispirer Toolkit analyzes all object dependencies during the conversion process and provides not only line-by-line conversion, but resolves type conversions as well. The software understands and transforms the necessary inheritance dependencies. It parses the entire source code, builds an internal tree with all the information about the objects, and uses it in the migration process.

The code samples below provide you with more details.

  • Variables declarations conversion:

    PowerBuilder

    1. long    var1
    2.   long    var2[]
    3.   string    var3
    4.   datetime  var4
    5.   boolean    var5
    6.   decimal    var6
    7.   integer    var7
    8.   any    var8

    → C# WPF

    1. int?        var1 = 0;
    2.             UnboundedArray < int? >        var2 = new UnboundedArray < int? >();
    3.             string        var3 = string.Empty;
    4.             DateTime?    var4 = new DateTime(1900, 1, 1);
    5.             bool?    var5 = false;
    6.             decimal?        var6 = null;
    7.             int?        var7 = 0;
    8.             object        var8 = new object();
  • Function conversion:

    PowerBuilder

    1. public function string sample_function();
    2. return "end"
    3. //do logic
    4. end function

    → C# WPF

    1. public  string sample_function()
    2.         {
    3.             return "end";
    4.             //do logic
    5.         }
  • Subroutine conversion:

    PowerBuilder

    1. protected subroutine sample_sub (string v_app);
    2.   v_app = ""
    3. //do logic
    4. end subroutine

    → C# WPF

    1. public  void sample_sub(string v_app)
    2.         {
    3.             v_app = "";
    4.             //do logic
    5.         }
  • If statement conversion:

    PowerBuilder

    1. integer i
    2.  
    3. if true then i = 1 else i = 2
    4.  
    5. if true then
    6.     i = 3
    7. end if

    → C# WPF

    1. int? i = 0;
    2.  
    3.             if (true)
    4.             {
    5.                 i = 1;
    6.             }
    7.             else
    8.             {
    9.                 i = 2;
    10.             }
    11.  
    12.             if (true)
    13.             {
    14.                 i = 3;
    15.             }
  • For statement conversion:

    PowerBuilder

    1. For lv_count = 1 to 10
    2.   lb_units[lv_count].Visible = TRUE
    3. Next

    → C# WPF

    1. for (lv_count = 1; lv_count <= 10; lv_count ++)
    2.             {
    3.                 lb_units[lv_count - 1].Visibility = Visibility.Visible;
    4.             }
  • While statement conversion:

    PowerBuilder

    1. IDX = 0
    2. do while true
    3.   if IDX = 10 then exit
    4.   IDX = IDX + 1
    5. loop

    → C# WPF

    1. idx = 0;
    2.  
    3.             while (true)
    4.             {
    5.                 if (idx == 10)
    6.                 {
    7.                     break;
    8.                 }
    9.  
    10.                 idx = idx + 1;
    11.             }
  • Try catch statement conversion:

    PowerBuilder

    1. try
    2.   IDX = 1 / 0
    3. catch (Exception ex )
    4.   IDX = 100
    5. FINALLY
    6.   IDX = IDX * 2
    7. end try

    → C# WPF

    1. try
    2.             {
    3.                 idx = 1 / 0;
    4.             }
    5.             catch (Exception ex)
    6.             {
    7.                 idx = 100;
    8.             }
    9.             finally
    10.             {
    11.                 idx = idx * 2;
    12.             }
  • Try choose statement conversion:

    PowerBuilder

    1. integer    some_id
    2. boolean cond
    3.  
    4. CHOOSE CASE some_id
    5.   Case IS < 0
    6.     cond = False
    7.   CASE 0 TO 2
    8.     cond = True
    9.     some_id = 200
    10.   Case IS > 0
    11.     cond = True
    12.   CASE ELSE
    13.     cond = False
    14.     some_id = 0
    15. END CHOOSE

    → C# WPF

    1. int?        some_id = 0;
    2.             bool? cond = false;
    3.  
    4.             if (some_id < 0)
    5.             {
    6.                 cond = false;
    7.             }
    8.             else if (some_id >= 0 && some_id <= 2)
    9.             {
    10.                 cond = true;
    11.                 some_id = 200;
    12.             }
    13.             else if (some_id > 0)
    14.             {
    15.                 cond = true;
    16.             }
    17.             else
    18.             {
    19.                 cond = false;
    20.                 some_id = 0;
    21.             }
  • Inline query conversion:

    PowerBuilder

    1. global type s_2 from structure
    2.     long        field_1
    3. end type
    4. s_2 param1[]
    5.  
    6.   INSERT INTO TAB1
    7.     (            
    8.     COL1 , COL2          
    9.     )
    10.   VALUES
    11.     (
    12.     :param1[1].field_1,
    13.     :param1[2].field_1
    14.   );

    → C# WPF

    1. public class s_2
    2.     {
    3.         public  int? field_1 = 0;
    4.     }
    5.  
    6.             UnboundedArray< s_2 > param1 = new UnboundedArray< s_2 >();
    7.             var dbCmd_ = new SACommand();
    8.             dbCmd_.CommandText = "INSERT INTO TAB1 " +
    9.                                  " (              " +
    10.                                  " COL1 , COL2            " +
    11.                                  " ) " +
    12.                                  " VALUES " +
    13.                                  " ( " +
    14.                                  " :field_1, " +
    15.                                  " :field_1 " +
    16.                                  " )";
    17.             dbCmd_.Parameters.AddWithValue("field_1", param1[0].field_1 ?? (object) DBNull.Value);
    18.             dbCmd_.Parameters.AddWithValue("field_1", param1[1].field_1 ?? (object) DBNull.Value);
    19.             dbCmd_.CommandType = CommandType.Text;
    20.             AppGlobalVariables.sqlca.ExecuteNonQuery(dbCmd_);
  • CURSOR conversion:

    PowerBuilder

    1. String v_uname[]
    2. Long v_unum[]
    3. Int  v_count = 1
    4.  
    5. DECLARE c_unit CURSOR FOR
    6. SELECT U_NAME, U_NUM
    7. FROM UNT
    8. WHERE A_NUM = 10;
    9.  
    10. OPEN c_unit;
    11. FETCH c_unit INTO :v_uname[v_count],:v_unum[v_count];
    12. v_count ++
    13. Do While SQLCA.SQLCode = 0
    14.   FETCH c_unit INTO :v_uname[v_count],:v_unum[v_count];
    15.   v_count ++
    16. Loop
    17. CLOSE c_unit;

    → C# WPF

    1. UnboundedArray< string > v_uname = new UnboundedArray< string >();
    2.             UnboundedArray < int? > v_unum = new UnboundedArray < int? >();
    3.             int?  v_count = 1;
    4.             var dbCmd_c_unit = new SACommand();
    5.             dbCmd_c_unit.CommandText = "SELECT U_NAME, U_NUM " +
    6.                                        " FROM UNT " +
    7.                                        " WHERE A_NUM = 10";
    8.             dbCmd_c_unit.CommandType = CommandType.Text;
    9.             var c_unit = sqlca.ExecuteReader(dbCmd_c_unit);
    10.  
    11.             if (c_unit.Read())
    12.             {
    13.                 v_uname[v_count] = c_unit?.GetString(0);
    14.                 v_unum[v_count] = c_unit?.GetInt32(1);
    15.             }
    16.             else
    17.             {
    18.                 sqlca.SqlCode = 100;
    19.             }
    20.  
    21.             v_count ++;
    22.  
    23.             while (sqlca.SqlCode == 0)
    24.             {
    25.                 if (c_unit.Read())
    26.                 {
    27.                     v_uname[v_count] = c_unit?.GetString(0);
    28.                     v_unum[v_count] = c_unit?.GetInt32(1);
    29.                 }
    30.                 else
    31.                 {
    32.                     sqlca.SqlCode = 100;
    33.                 }
    34.  
    35.                 v_count ++;
    36.             }
    37.  
    38.             c_unit.Close();
    39.             c_unit.Dispose();

Get a free sample code of our PowerBuilder to C# WPF code conversion

Ispirer Toolkit automatically converts not only a single piece of code, but an entire application. Complex code will require customization of the toolkit

  • Explore how Ispirer Toolkit migrates the source code to the target technology without downloading it.
  • Analyze and compare the source sample with your code to understand which components of your application can be automatically converted using Ispirer Toolkit.
  • Test an application containing nearly 1,500 lines of code.
  • Our experts can add new conversion rules within 3-5 business days.
Enter your name.
Enter a valid e-mail address.
Select your country.

PowerBuilder to C# WPF conversion overview

PowerBuilder programs consist of Workspaces (starting from PB 8.0 and higher, these are .pbw files). Conceptually, they are similar to Solution. These are text files consisting of paths to the Target files (.pbt files) that correspond to the concept of Project. The Target files are in text format, and each contains paths to the PowerBuilder libraries (.pbl files that store source code files in binary format). Typically a library with the same name as the Target file has a .sra entry point file.

To convert a PowerBuilder application, you need to extract all source files from the appropriate Workspace libraries (or Target, if PB version is less than 8). You can download Ispirer PowerBuilder Metrics to get a statistical report on PB sources, as well as extract source files from PowerBuilder libraries using Workspace, or a set of Target files, or a set of particular PB libraries (.pbl files) that need to be converted.

Once the source code is extracted, for each PowerBuilder library file, a corresponding folder named library will be created with all the source code extracted. The folders will contain source files with the following file extensions:

  • .SRD - DataWindow source files
  • .SRW - Window source files
  • .SRM - Menu source files
  • .SRS - Structure source files
  • .SRP - Data pipeline source files
  • .SRF - Function source files
  • .SRQ - Query source files
  • .SRA - Application source files
  • .SRU - Custom user object source files

Now you can use Ispirer CodeWays to convert it to your chosen target technology. Basic source type conversion by extension:

  • .SRD - converted to 3 files in a folder named datawindow_object_name_srd. The files are named datawindow_object_name_srdView.xaml and datawindow_object_name_srdView.xaml.cs – the UI and code of the DataWindow object and file datawindow_object_name_srdViewModel.cs with view model of the DataWindow object.
  • .SRW - converted to 3 files in a folder named window_object_name_srw. The files are named window_object_name_srwView.xaml and window_object_name_srwView.xaml.cs – the UI and code of the Window object and file window_object_name_srwViewModel.cs with view model of the Window object.
  • .SRM - converted to 3 files in a folder named menu_object_name_srm. The files are named menu_object_name_srmView.xaml and menu_object_name_srmView.xaml.cs – the UI and code of the Menu object and file menu_object_name_srmViewModel.cs with view model of the Menu object.
  • .SRS - converted to 1 file named structure_object_name_srs.cs. The file contains a class with variable declarations from the PowerBuilder structure.
  • .SRP - not used for conversion.
  • .SRF - converted to 1 file named function_object_name_srf.cs. The file has a public static partial class AppGlobalFunctions with a converted function.
  • .SRQ - not used for conversion.
  • .SRA - converted to 1 file named application_object_name_sra.cs. The contents of this file are used to copy into the project's entry point file in the same way as in the conversion sample.
  • .SRU - converted to 1 file named user_object_name_sru.cs for nonvisualobject and to 3 files in folder named user_object_name_sru. The files are named user_object_name_sruView.xaml and user_object_name_sruView.xaml.cs – the UI and code of the User object and file user_object_name_sruViewModel.cs with view model of the User object.

After the conversion, you need to create a WPF application desktop project in Visual Studio and add the converted files from the results folder to it. There is the Ispirer framework for converting PowerBuilder to C# WPF (IspirerFramework*) in the results folder. It contains 4 or more projects that should be added to the solution and used in the main project with the conversion results as references. The events are converted to the corresponding events of the target technology.

Note: this is a special framework provided by Ispirer. It extends the target technology to enable specific source code features.

They succeeded using Ispirer Toolkit

Transportation firm expands software with Ispirer Service

Delphi → C# WPF

Target: C#

Transportation firm expands software -- сase card

Project Scope

600 000 LoC

Project Duration

11 Months

Industry

Transportation and defense corporation

Cut migration effort in half for automotive supplier

COBOL → Java

Target: Java

Cut migration effort -- case card

Project Scope

400 000 LoC

Project Duration

12 Months

Industry

Automotive Products Supplier

Automated modernization of a legacy enterprise system

PowerBuilder → C# WPF

Target: C#

Automated modernization -- case card

Project Scope

1 800 000 LoC

Project Duration

15 Months

Industry

Pharmacy system provider

Faster, cleaner, and more stable application after modernization

C++ → C#

Target: C#

Faster, cleaner, and more stable application -- case card

Project Scope

275 000 LoC

Project Duration

14 Months

Industry

Independent Software Vendor

All success stories

Trust us with your conversion project

  • Seasoned team

    Ensuring high security and performance standards is what we do best, thanks to our impressive expertise in building reliable and scalable solutions.

  • Technology expertise with 25+ years of experience

    Our team has gained a wide pool of expertise in various programming languages, from the rarest to the most popular ones.

  • We comply with ISO 27001 security

    We comply with ISO 27001 security management requirements with comprehensive policies and processes, advanced security technology, and skilled professionals.

  • Proprietary tools

    We employ Ispirer proprietary tools, underscoring our dedication to delivering the utmost reliability and performance solutions.

    The toolkit is compiled daily and continually integrates dozens of new conversion rules, enhancing the automation capabilities.

6 undeniable facts to choose conversion with Ispirer

  • Fact 1/6

    Same functionality, new application

    Migration does not require labor-intensive development of new functionality from scratch. Your application will be converted to a new technology while maintaining the original functionality

    New application -- card image
  • Fact 2/6

    Architecture preserved or modified

    Automated conversion implies preserving the initial architecture which is easier to maintain. The app architecture, can also be transformed, for example, from desktop to the web to improve accessibility and scalability

    Architecture preserved or modified -- card image
  • Fact 3/6

    The speed of conversion

    Migrating an application is much faster than creating a new one from scratch. Automated migration with Ispirer Toolkit minimizes manual effort and may speed up the delivery by 2-3 times

    The speed of conversion -- card image
  • Fact 4/6

    Legacy System Transformation

    Migrating PowerBuilder to modern architectures or platforms can upgrade your application, making it easier to maintain, update, and extend in the long term run

    Legacy System Transformation -- card image
  • Fact 5/6

    Performance and Scalability

    Through conversion, you can optimize the application's architecture and infrastructure, improving scalability and performance without the need to rebuild everything

    Performance and Scalability -- card image
  • Fact 6/6

    No need for documentation

    To perform the conversion, we go by your source code. There is no need to have detailed documentation in place to start the conversion as is the case with development

    No need for documentation -- card image

They chose Ispirer to revamp their application

Epicor, University of Maryland, NedGraphics and more have adopted CodeWays to boost their innovation life-cycle accelerate and manage their end-to-end innovation lifecycle

Epicor logo
University of Maryland logo
High Availability Systems Co. Ltd., Japan
NedGraphics, The Netherlands logo
Kellenberger, Switzerland logo

Progress ABL to C#

Migration project

50%

Migration time reduction

2 MLN

Lines of code

75%

Аutomation achieved

Enterprise software

"We have found the Ispirer team to be knowledgeable and responsive, and we have found the tooling to be flexible enough to be easily adapted to our coding conventions."

COBOL to Java

Migration project

6-month

Migration time reduction

100K+

Lines of code

200+

COBOL programs

Education

"Ispirer Toolkit enabled us to efficiently convert 200 COBOL programs with over 100,000 lines of code to Java. The tool produced high-quality, maintainable code, allowing our team to focus on infrastructure rather than conversion. Ispirer’s support was exceptional, often resolving issues within one business day."

Informix 4GL to Oracle PL/SQL

Migration project

95%

Аutomation achieved

200K+

Lines of code

75%

Migration time reduction

IT Services

"Ispirer provided a full-cycle migration service, converting over 200,000 lines of Informix 4GL to Oracle PL/SQL with 95% automation. Their expertise, customizations, and commitment to quality ensured a seamless transition. We highly recommend Ispirer for complex migration projects."

C/C++, AutoLISP to C#.NET

Migration project

70%

Аutomation achieved

250K+

Lines of code

50%

Migration cost reduction

Civil engineering and infrastructure

"We were impressed with the knowledge, professionalism, hard work, and enthusiasm of the Ispirer team. Through this Migration Project, we have a solid base for further expanding our application."

Borland Delphi 7.0 modernization

Migration project

75%

Аutomation achieved

20K

Lines of code

50%

Migration time reduction

Automation Equipment

"We had an old Borland Delphi 7.0 project, which was brought back to life. Ispirer had offered us a timely and financially attractive conversion of the application. The work was performed promptly."

All testimonials

Frequently Asked Questions

Find answers. Ask questions. Connect with Ispirer support.

Want more details?

Request a consultation with our expert

Schedule a call

30 min of constructive conversation

What are the top tools for PowerBuilder to C# conversion?

Yes. PowerBuilder to C# is a supported Ispirer direction handled by CodeWays, and .NET is a common target because the deployment model and the component approach stay familiar to the existing team.

PowerScript becomes C# classes, non visual objects become services, and window objects become WinForms, WPF or, for a web target, Blazor and ASP.NET Core pages with a separate front end.

DataWindow objects are split into a query, a grid or report component, validation rules and generated update statements, since there is no standard .NET control that fully reproduces the behavior of a PowerBuilder DataWindow. Embedded SQL through SQLCA is replaced by ADO.NET or another appropriate .NET data-access technology with explicit transaction scope.

Three risks need planning: implicit DataWindow update logic that must be made explicit, third party PowerBuilder controls without .NET equivalents, and InfoMaker reports moved to a reporting engine. The database side runs through SQLWays in the same project.