home *** CD-ROM | disk | FTP | other *** search
- ///////////////////////////////////////////////////////////////////////////////
- //
- // FILE: example4.sqc
- //
- // Sample Embedded SQL for C application
- //
- // FUNCTIONS:
- //
- // main() - Main program
- // ErrorHandler - Embedded SQL for C error handler
- //
- // COMMENTS:
- //
- // Copyright (C) 1992 - 1994 Microsoft Corporation
- //
- ///////////////////////////////////////////////////////////////////////////////
-
- // function prototypes (instead of header file)
- void ErrorHandler (void);
-
- #include <stddef.h> // standard C run-time header
- #include <stdio.h> // standard C run-time header
- #include "gcutil.h" // utility header
-
- // GLOBAL VARIABLES
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // FUNCTION: main()
- //
- // Main application
- //
- // PARAMETERS:
- //
- // argc - count of command line args
- // argv - array of command line argument strings
- // envp - array of environment strings
- //
- // RETURNS: 0 if successful, 1 if error
- //
- // COMMENTS:
- //
- ///////////////////////////////////////////////////////////////////////////////
-
- int main (
- int argc,
- char** argv,
- char** envp)
- {
- int nRet; // for return values
- char szLogin[SQLID_MAX+1] = ""; // login ID
- char szPassword[SQLID_MAX+1] = ""; // password
- char szServer[SQLID_MAX+1] = ""; // SQL Server
- char szDatabase[SQLID_MAX+1] = ""; // database to use
-
- EXEC SQL BEGIN DECLARE SECTION;
- // for CONNECT TO
- char szServerDatabase[(SQLID_MAX * 2)+2] = "";
- char szLoginPassword[(SQLID_MAX * 2)+2] = "";
- char cmd[] = "select au_fname, au_lname from author2";
- char reply[10];
- char fname[20];
- char lname[40];
- char fname2[20];
- char lname2[40];
- EXEC SQL END DECLARE SECTION;
-
- // install Embedded SQL for C error handler
- EXEC SQL WHENEVER SQLERROR CALL ErrorHandler();
- // set Embedded SQL for C options
- EXEC SQL SET OPTION LOGINTIME 10;
- EXEC SQL SET OPTION QUERYTIME 100;
-
- // display logo
- printf("Sample Embedded SQL for C application\n");
-
- // get info for CONNECT TO statement
- nRet = GetConnectToInfo(argc, argv,
- szServerDatabase,
- szLoginPassword);
- if (!nRet)
- {
- return (1);
- }
-
- // attempt connection to SQL Server
- EXEC SQL CONNECT TO :szServerDatabase
- AS D1
- USER :szLoginPassword;
- if (SQLCODE == 0)
- {
- printf("Connection to first SQL Server established\n");
- }
- else
- {
- // problem connecting to SQL Server
- printf("ERROR: Connection to first SQL Server failed\n");
- return (1);
- }
-
- // prompt for options for second server
- printf("Type the other SQL Server to connect to: ");
- gets(szServer);
- printf("Type your other login ID: ");
- gets(szLogin);
- printf("Type your other password: ");
- gets(szPassword);
- printf("Type the other database to use (default is 'pubs'): ");
- gets(szDatabase);
-
- // set defaults
- if (strlen(szDatabase) == 0)
- {
- strcpy(szDatabase, "pubs");
- }
-
- printf("Also Using:\n");
- printf(" SQL Server: %s\n", szServer);
- printf(" Database: %s\n", szDatabase);
- printf(" Login ID: %s\n", szLogin);
- printf(" Password: %s\n", szPassword);
-
- // re-initialize
- szServerDatabase[0] = '\0';
- szLoginPassword[0] = '\0';
-
- // build variables for CONNECT TO statement
- if (strlen(szServer) != 0)
- {
- strcat(szServerDatabase, szServer);
- strcat(szServerDatabase, ".");
- }
- if (strlen(szDatabase) != 0)
- {
- strcat(szServerDatabase, szDatabase);
- }
-
- if (strlen(szLogin) != 0)
- {
- strcat(szLoginPassword, szLogin);
- }
- if (strlen(szPassword) != 0)
- {
- strcat(szLoginPassword, ".");
- strcat(szLoginPassword, szPassword);
- }
-
- // attempt other connection to SQL Server
- EXEC SQL CONNECT TO :szServerDatabase
- AS D2
- USER :szLoginPassword;
- if (SQLCODE == 0)
- {
- printf("Connection to second SQL Server established\n");
- }
- else
- {
- // problem connecting to SQL Server
- printf("ERROR: Connection to second SQL Server failed\n");
- return (1);
- }
-
- EXEC SQL SET CURSORTYPE CUR_STANDARD;
-
- EXEC SQL DECLARE C1 CURSOR FOR S1;
- EXEC SQL DECLARE C2 CURSOR FOR S2;
-
- EXEC SQL SET CONNECTION D1;
- EXEC SQL PREPARE S1 FROM :cmd;
- EXEC SQL OPEN C1;
-
- EXEC SQL SET CONNECTION D2;
- EXEC SQL PREPARE S2 FROM :cmd;
- EXEC SQL OPEN C2;
-
- while (SQLCODE == 0) {
-
- EXEC SQL FETCH C1 INTO :fname, :lname;
- EXEC SQL FETCH C2 INTO :fname2, :lname2;
-
- if (SQLCODE == 0) {
- printf( "C1 %s %s\n", fname, lname );
- printf( "C2 %s %s\n", fname2, lname2);
- printf( "u)pdate q)uit : ");
- gets( reply );
- if (_stricmp(reply, "q") == 0)
- break;
- if (_stricmp(reply, "u") == 0) {
- printf( "New last name: ");
- gets( lname );
- EXEC SQL SET CONNECTION D1;
- EXEC SQL
- update author2 set au_lname=:lname
- WHERE CURRENT OF C1
- ;
- printf( "update1 sqlcode = %d\n", SQLCODE);
- EXEC SQL SET CONNECTION D2;
- EXEC SQL
- update author2 set au_lname=:lname
- WHERE CURRENT OF C2
- ;
- printf( "update2 sqlcode = %d\n", SQLCODE);
- }
- }
-
- }
-
- EXEC SQL CLOSE C1;
- EXEC SQL CLOSE C2;
-
- // disconnect from SQL Server
- EXEC SQL DISCONNECT ALL;
-
- return (0);
- }
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // FUNCTION: ErrorHandler()
- //
- // Called on Embedded SQL for C error, displays fields from SQLCA
- //
- // PARAMETERS: none
- //
- // RETURNS: none
- //
- // COMMENTS:
- //
- ///////////////////////////////////////////////////////////////////////////////
-
- void ErrorHandler (void)
- {
- // display error information from SQLCA
- printf("Error Handler called:\n");
- printf(" SQL Code = %li\n", SQLCODE);
- printf(" SQL Server Message %li: '%Fs'\n", SQLERRD1, SQLERRMC);
- }
-