EXEC SQL statements do not appear to execute and no record returned

I have a program coded for reading a record from a MS SQL Server database Table.  When I step through the code in debug mode it lands on the EXEC SQL statement and when I step again it lands outside of the EXEC SQL/END-EXEC structure. It looks as though none of the statements inside this structure are executing.  Is this normal?  If it is, is there a way to step through this structure to observe the back end process?  I'm not returning the record from my SQL  query and need to figure out why.

My database and table are able to display in the 'Server Explorer' of Visual Studio.

The database object is not displayed in the Solution Explorer.

I'm using a ADO.NET DSN and it's connected to my MS SQL Server database successfully.

I'm using GEN-SQLCA directive in the ESQL Preprocessor-OPENESQL.

Here is my code:

IDENTIFICATION DIVISION.
PROGRAM-ID. FirstDBProg.

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

DATA DIVISION.
*
WORKING-STORAGE SECTION.
*
EXEC SQL
INCLUDE SQLCA
END-EXEC
*
COPY CustContacts.
*
PROCEDURE DIVISION.

*Test error handling
EXEC SQL
CONNECT TO ‘SQLNOEXIST’
END-EXEC
*Connect to DSN that uses Windows authentication

EXEC SQL
CONNECT TO ‘MSSQLSADONET’
END-EXEC
*Retrieve record(s)
PERFORM Execute-Select
*
EXEC SQL
DISCONNECT CURRENT
END-EXEC

STOP RUN.
*
Execute-Select.
EXEC SQL
SELECT A.CustFirstName INTO :WS-CustFirstName
FROM TblCustContacts A
WHERE (A.CustNum = 1)
END-EXEC
*
DISPLAY WS-CustFirstName.
*
OpenESQL-ERROR.
DISPLAY "Error = " SQLERRM
DISPLAY "SQLCode = " SQLCODE.
*
END PROGRAM FirstDBProg.

******************************************************

  • 0  

    Hi Kevin.

    You have an error checking paragraph in your program but I dont see any code that actually performs the check of SQLCODE after each exec sql statement. 

    If you perform this paragraph after each statement, what is the value of SQLCODE after the select statement?

    Chris Glazier
    Rocket Software - Principal Technical Support Specialist
    If you found this post useful, give it a “Like” or click on "Verify Answer" under the "More" button

  • 0 in reply to   

    I had to code a perform of the paragraph "OpenESQL-ERROR" to force it to execute and got the following error after the statement line EXEC SQL CONNECT TO ‘MSSQLSADONET’ END-EXEC:

    Error = ; Data source name not found and no default driver specified
    SQLCode = -0000019703

    I show the following properties of the data source in the ADO.NET Connection Editor:

    I'm not sure where to verify the driver so if you can help with that i'd appreciate it.

  • 0   in reply to 

    If you code an EXEC SQL WHENEVER statement at the top of your procedure division in your program a perform of the specified error paragraph will be done when an error occurs.

    EXEC SQL WHENEVER sqlerror PERFORM OpenESQL-ERROR END-EXEC

    It looks like your connection string is not complete. You need to fill in the data source name which is your SQL Server database name and perhaps the initial catalog field with a value such as NORTHWIND.

    You can click the test button in the ADO connection editor to make sure it works before trying it in your program.

    Chris Glazier
    Rocket Software - Principal Technical Support Specialist
    If you found this post useful, give it a “Like” or click on "Verify Answer" under the "More" button

  • 0 in reply to   

    I tried unsuccessfully to test the connection in the ADO connection editor.  Here is the error:

  • 0   in reply to 

    Set the Context Connection option to false.

    Chris Glazier
    Rocket Software - Principal Technical Support Specialist
    If you found this post useful, give it a “Like” or click on "Verify Answer" under the "More" button

  • 0 in reply to   

    After setting context connection to false, Retrying and entering my user name i get the following error:

  • 0   in reply to 

    Try turning off the MultiSubnetFailover option.

    Is your database on the same machine on which you are creating the connection or on a remote machine? If it is on a different machine then you have to make sure it allows remote connections.

    See here:

    If you open up SQL Server Management Studio is the Server name that you connect to the same as the name that you are using in the ADO connection?

    Chris Glazier
    Rocket Software - Principal Technical Support Specialist
    If you found this post useful, give it a “Like” or click on "Verify Answer" under the "More" button

  • 0 in reply to   

    My database is on the same machine that I’m attempting to make a connection and the MS SQL Server setting is already set to “allow remote connections to this server.”

    The Server name I connect to is the same as the name that I’m using in the ADO connection.

    After setting MultiSubnetFailover option to False and attempting to login using my userid (there is no password set in MSQL Server account), I get a different error: 

  • 0   in reply to 

    Can you please show me what the complete contents of the Connection String field is?

    Chris Glazier
    Rocket Software - Principal Technical Support Specialist
    If you found this post useful, give it a “Like” or click on "Verify Answer" under the "More" button

  • 0 in reply to   

    Connection string in ADO Connection Editor is:  Data Source=<device name here>;Initial Catalog=MiscCustomer;Integrated Security=True;MultipleActiveResultSets=True;Context Connection=True