Question

How to call an AS400 program from C#

Asked by: MGothelf

Is there a simple way to call an AS400 (RPG or CL) program from a C# program?  I would simply like to call program, pass parameters, get return values.  I am using OLEDB to access the AS400 database via SQL calls, but I would like to use many of the existing AS400 programs that are already there.

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2006-02-10 at 20:34:30ID21732664
Tags

as400

,

call

,

program

Topic

Programming for iSeries / AS400

Participating Experts
4
Points
250
Comments
11

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Connect to RPG Data on AS400 from MSAccess
    I have developed a full featured Workshop and Service management system in Access. I have a client running a legacy RPG application on an AS400. I need a convenient way to transfer data between these applications. Better still an ODBC link to the AS400 data. At this stage thi...
  2. Run CL on AS400 from VB
    How to call CL procedure on AS400 from VB?
  3. AS400 CL programming
    Is it possible to write to a database physical file within a CL program, using data created through a variable e.g. current date value. I wish to write the &MSGDTA variable to a file for future processing. PGM ...
  4. as400 overlay
    I have a program in the as400 that when I print I would like to include an overlay with it. Right now we print out the overlay from the as400 then load the paper back in the printer and then go to the program and print it out. What I would like is to just be able to go to ...
  5. AS400 RPG READING FILE
    HELLO I`ve got a db file A (compiled) it has some records every record is one file (library, type of file and filename). I know how to read this file (i define him in the first line of the program beginning with F) and I know how to read what is in this file. Now I`ve got ...
  6. OLEDB to AS400
    Below is the connection string I have created to connect to an AS400. I have created a dataset and am trying to configure the data adapter using the connection. After I type my SQL command in and go next I get an "External component has thrown an exception." error...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: _b_hPosted on 2006-02-10 at 21:55:45ID: 15929385

There is a sample for Host Integration Server on the Microsoft Website that will work for you as well.
Essentially, you create a stored procedure on the AS/400 that points to a program and describes its parms.
Then you call the stored procedure in your C# program.
This link contains CL and RPGLE examples, as well as C# code:
http://www.microsoft.com/downloads/details.aspx?FamilyID=145B7A37-4F44-4093-9C54-36FAB9389AC0&displaylang=en

This should get you started
Barry

 

by: dedy_djajapermanaPosted on 2006-02-12 at 19:00:46ID: 15938379

alternately, you can use cwbx.dll, an activex automation object from client access
you can call the program directly using cwbx.Programs and not required to create stored procedure

 

by: MGothelfPosted on 2006-02-12 at 21:21:57ID: 15938853

Regarding cwbx, I did a bit of research and it seems I need V5R3 version of Client Access.  Is that true?

 

by: dedy_djajapermanaPosted on 2006-02-12 at 21:29:55ID: 15938875

 

by: BryavPosted on 2006-02-13 at 20:15:00ID: 15948110

I have 2 ideas for you that have worked for me in the past.  I'm normally a VB guy, so I can't give you precise C# code, but I can tell you exactly what you need to do and it's really simple.

First off, if you're using ODBC and using SQL you can simply do a SQL CALL( ).  SQL in the iSeries allows you do a call statement.  The Call statement can call any RPG, CL, Cobol, CLLE, RPGLE, etc. that's on the 400.  You have the option to wait for an answer or to just do the call and exit.  The SQL Call statement can also call a stored procedure.  In fact you could even get really sophisticated and use the call statement to create a source file, then pass in some code and then compile a program and run it.  Basically you could do almost anything.

The syntax is simple.  Just setup your connection like any normal SQL connection and instead of doing a select statement just do somthing like this:  'Call MyCLPgm (PARM1)' or Just 'Call MyRPGPgm' and then execute it.  Simple and elegant.

The other way is to do a REXEC procedure if you're running from windows.  This opens a shell that executes a remote procedure call on the 400.  The only thing here is that you have to have the RPC service running on the 400.  This can be turned on by opening up Operations Navigator and going to the Networking section and then to TCP/IP Servers.  Just start it up and leave it running.  If it's running the the windows REXEC can execute remote procedure calls to the 400.

The shell program requires some SendKeys operations to it because you have log in, etc.  So it's a little more cumbersome that the SQL Call Statement, but here's some VB code that I've used successfully to do the REXEC which will call any program on the 400 also.
---------
Dim strCommand1 As String = "SBMJOB CMD(CALL PGM(LAWMOD7/IFCEXCEDGL) PARM("
        Dim strCommand2 As String 'LawUser and LawJobName
        Dim strCommand3 As String = "))"
        Dim strCommand As String
        Dim ReturnCode
        Dim strPassword As String = ""
        Dim strUser As String = ""
       
        strUser = InputBox("Enter Lawson User ID", "Login to Lawson", "", , )
        strPassword = InputBox("Enter Lawson Password", "Login to Lawson", "", , ) & "~"
        strCommand2 = "'" & strUser & "'" & " '" & InputBox("Enter Lawson GL165 Job Name", "Job to Execute", "", , ) & "'"
        strCommand = strCommand1 & strCommand2 & strCommand3
 
        'Open the command shell with a handle to reactivate using sendkeys
        ReturnCode = Shell(Environ$("WINDIR") & "\system32\rexec.exe iseries -l " & strUser & " " & strCommand, AppWinStyle.NormalFocus)
 
        'Wait a second for the shell command to execute and prompt for the password.
        For x As Integer = 1 To 10000
        Next x
 
        'Activate the shell window
        AppActivate(ReturnCode)
 
        'Send the password to the shell runas program
        SendKeys.SendWait(strPassword)

---------
This is some code that we use to send some data to the AS/400 and to Lawson Financials in particular and then call a Lawson job to process the journal entries we pass in from another system.

The advantage of the SQL Call is that you can wait for results or you can use the submit the job to batch.  You have more control and it's actually a lot simpler.

Let me know if you need more help.  Like I said, my C# skills aren't much beyond reading it and understanding it, but conceptually, I can probably explain what you need to do.

Good luck.

Bryant

 

by: MGothelfPosted on 2006-02-13 at 21:22:32ID: 15948387

Bryav - when you say 'you have the option to wait for an answer or exit', what do you mean?  I would assume that just like a SQL Select, the program waits for the call to finish.

Also, if I do  'Call MyCLPgm (PARM1,PARM2)', where PARM2 is return, how do I access this value?

 

by: dedy_djajapermanaPosted on 2006-02-13 at 22:01:27ID: 15948522

that's possible if you're using cwbx.program cause parameter can be defined as in/out/InOut
in fact i was recently put lots of interest on usage of cwbx to call as/400 API directly from VB, however, my VB is very poor. If you like to look around, please look at www.dd400.com

 

by: dedy_djajapermanaPosted on 2006-02-13 at 23:45:23ID: 15948905

after some more researches, i found that performance wise, C/C++ API is better compared to activeX automation object.
please see http://publib.boulder.ibm.com/iseries/v5r2/ic2924/index.htm?info/rzaik/rzaikoverview.htm

 

by: MGothelfPosted on 2006-02-22 at 06:34:02ID: 16019245

I have tried to create a stored procedure but it does not work.  Here is the code:

 private void button1_Click(object sender, EventArgs e)
        {        
           string ConnString = "Provider=IBMDA400.DataSource.1;" +
             "Data Source=172.30.28.36;" +
             "USER ID=DOTNET;" +
             "PASSWORD=DOTNET;" +
             "DEFAULT COLLECTION =MYLIB;";
 
            OleDbConnection myConnection = new OleDbConnection(ConnString);
            OleDbCommand myCommand = new OleDbCommand("CALL MYLIB.ACXTEST(?,?)", myConnection);
            myCommand.CommandType = CommandType.Text;

            //setup the parameters
            OleDbParameter myParameter = new OleDbParameter("INPARM", OleDbType.Char, 5);
            myParameter.Value = this.txtInput.Text;
            myParameter.Direction = ParameterDirection.InputOutput;
            myCommand.Parameters.Add(myParameter);
            OleDbParameter myParameter2 = new OleDbParameter("OUTPARM", OleDbType.Char, 7);
            myParameter2.Value = "String2";
            myParameter2.Direction = ParameterDirection.InputOutput;
            myCommand.Parameters.Add(myParameter2);

            try
            {
                myConnection.Open();
                myCommand.ExecuteNonQuery();
                this.lblReturn.Text = Convert.ToString(myParameter2);
                myConnection.Close();
            }
            catch (Exception excv)
            {
                string ErrorMsg = excv.Message.ToString();
                this.lblReturn.Text = "FAILED " + ErrorMsg;
            }
        }
===========================================

HERE IS AS400 CODE:

CREATE PROCEDURE mylib/ACXTEST(INOUT inparm CHAR ( 5), INOUT    
outparm CHAR ( 7)) DETERMINISTIC NO SQL EXTERNAL NAME          
mylib/ACCTEST PARAMETER STYLE GENERAL                          
CREATE PROCEDURE statement complete.                            

========================================

Here is error message
$exception      {"SQL0440: Routine ACCTEST in MYLIB not found with specified parameters.\r\nCause . . . . . :   A function or procedure with the specified name and compatible arguments was not found. Recovery  . . . :   Specify the correct number and type of parameters on the CALL statement or function invocation. Try the request again."}      System.Exception {System.Data.OleDb.OleDbException}

 

by: MGothelfPosted on 2006-02-22 at 06:47:15ID: 16019369

PROBLEM SOLVED.  It was stored procedures that worked.  I had an discrepancy in my parameter definitions.  Once I fixed that, the pgm worked.

 

by: joerattzPosted on 2007-10-11 at 13:47:23ID: 20060985

You can do it the way you did, but parameters can be a hassle.  i would recommend you look at using the cwbx.dll that someone else here recommended.  Here are some links to articles I wrote discussing how to do this:

http://www.netsplore.com/PublicPortal/Default.aspx?tabid=246
http://www.netsplore.com/PublicPortal/blog.aspx?EntryID=13

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...