home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Internet Business Development Kit / PRODUCT_CD.iso / sqlsvr / esqlc / esql / samples.c / example4.sqc < prev    next >
Encoding:
Text File  |  1995-12-19  |  6.4 KB  |  238 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  FILE: example4.sqc
  4. //              
  5. //      Sample Embedded SQL for C application
  6. //
  7. //  FUNCTIONS:
  8. //
  9. //      main() - Main program
  10. //      ErrorHandler - Embedded SQL for C error handler
  11. //
  12. //  COMMENTS:
  13. //
  14. //      Copyright (C) 1992 - 1994 Microsoft Corporation
  15. //
  16. ///////////////////////////////////////////////////////////////////////////////
  17.  
  18. // function prototypes (instead of header file)
  19. void ErrorHandler (void);
  20.  
  21. #include <stddef.h>         // standard C run-time header
  22. #include <stdio.h>          // standard C run-time header
  23. #include "gcutil.h"         // utility header
  24.  
  25. // GLOBAL VARIABLES
  26.  
  27. ///////////////////////////////////////////////////////////////////////////////
  28. //
  29. //  FUNCTION: main()
  30. //
  31. //      Main application
  32. //
  33. //  PARAMETERS:
  34. //
  35. //      argc - count of command line args
  36. //      argv - array of command line argument strings
  37. //      envp - array of environment strings
  38. //
  39. //  RETURNS: 0 if successful, 1 if error
  40. //
  41. //  COMMENTS:
  42. //
  43. ///////////////////////////////////////////////////////////////////////////////
  44.  
  45. int main (
  46.     int argc,
  47.     char** argv,
  48.     char** envp)
  49. {
  50.     int nRet;                           // for return values
  51.     char szLogin[SQLID_MAX+1] = "";     // login ID
  52.     char szPassword[SQLID_MAX+1] = "";  // password
  53.     char szServer[SQLID_MAX+1] = "";    // SQL Server
  54.     char szDatabase[SQLID_MAX+1] = "";  // database to use
  55.  
  56.     EXEC SQL BEGIN DECLARE SECTION;
  57.     // for CONNECT TO
  58.     char szServerDatabase[(SQLID_MAX * 2)+2] = "";
  59.     char szLoginPassword[(SQLID_MAX * 2)+2] = "";
  60.     char cmd[] = "select au_fname, au_lname from author2";
  61.     char reply[10];
  62.     char fname[20];
  63.     char lname[40];
  64.     char fname2[20];
  65.     char lname2[40];
  66.     EXEC SQL END DECLARE SECTION;
  67.  
  68.     // install Embedded SQL for C error handler
  69.     EXEC SQL WHENEVER SQLERROR CALL ErrorHandler();
  70.     // set Embedded SQL for C options
  71.     EXEC SQL SET OPTION LOGINTIME 10;
  72.     EXEC SQL SET OPTION QUERYTIME 100;
  73.  
  74.     // display logo
  75.     printf("Sample Embedded SQL for C application\n");
  76.  
  77.     // get info for CONNECT TO statement
  78.     nRet = GetConnectToInfo(argc, argv,
  79.         szServerDatabase,
  80.         szLoginPassword);
  81.     if (!nRet)
  82.     {
  83.         return (1);
  84.     }
  85.  
  86.     // attempt connection to SQL Server
  87.     EXEC SQL CONNECT TO :szServerDatabase
  88.         AS D1
  89.         USER :szLoginPassword;
  90.     if (SQLCODE == 0)
  91.     {
  92.         printf("Connection to first SQL Server established\n");
  93.     }
  94.     else
  95.     {
  96.         // problem connecting to SQL Server
  97.         printf("ERROR: Connection to first SQL Server failed\n");
  98.         return (1);
  99.     }
  100.  
  101.     // prompt for options for second server
  102.     printf("Type the other SQL Server to connect to: ");
  103.     gets(szServer);
  104.     printf("Type your other login ID: ");
  105.     gets(szLogin);
  106.     printf("Type your other password: ");
  107.     gets(szPassword);
  108.     printf("Type the other database to use (default is 'pubs'): ");
  109.     gets(szDatabase);
  110.  
  111.     // set defaults
  112.     if (strlen(szDatabase) == 0)
  113.     {
  114.         strcpy(szDatabase, "pubs");
  115.     }
  116.     
  117.     printf("Also Using:\n");
  118.     printf("    SQL Server: %s\n", szServer);
  119.     printf("    Database: %s\n", szDatabase);
  120.     printf("    Login ID: %s\n", szLogin);
  121.     printf("    Password: %s\n", szPassword);
  122.  
  123.     // re-initialize
  124.     szServerDatabase[0] = '\0';
  125.     szLoginPassword[0] = '\0';
  126.  
  127.     // build variables for CONNECT TO statement
  128.     if (strlen(szServer) != 0)
  129.     {
  130.         strcat(szServerDatabase, szServer);
  131.         strcat(szServerDatabase, ".");
  132.     }
  133.     if (strlen(szDatabase) != 0)
  134.     {
  135.         strcat(szServerDatabase, szDatabase);
  136.     }
  137.  
  138.     if (strlen(szLogin) != 0)
  139.     {
  140.         strcat(szLoginPassword, szLogin);
  141.     }
  142.     if (strlen(szPassword) != 0)
  143.     {
  144.         strcat(szLoginPassword, ".");
  145.         strcat(szLoginPassword, szPassword);
  146.     }
  147.  
  148.     // attempt other connection to SQL Server
  149.     EXEC SQL CONNECT TO :szServerDatabase
  150.         AS D2
  151.         USER :szLoginPassword;
  152.     if (SQLCODE == 0)
  153.     {
  154.         printf("Connection to second SQL Server established\n");
  155.     }
  156.     else
  157.     {
  158.         // problem connecting to SQL Server
  159.         printf("ERROR: Connection to second SQL Server failed\n");
  160.         return (1);
  161.     }
  162.  
  163.     EXEC SQL SET CURSORTYPE CUR_STANDARD;
  164.  
  165.     EXEC SQL DECLARE C1 CURSOR FOR S1;
  166.     EXEC SQL DECLARE C2 CURSOR FOR S2;
  167.  
  168.     EXEC SQL SET CONNECTION D1;
  169.     EXEC SQL PREPARE S1 FROM :cmd;
  170.     EXEC SQL OPEN C1;
  171.  
  172.     EXEC SQL SET CONNECTION D2;
  173.     EXEC SQL PREPARE S2 FROM :cmd;
  174.     EXEC SQL OPEN C2;
  175.  
  176.     while (SQLCODE == 0) {
  177.  
  178.         EXEC SQL FETCH C1 INTO :fname, :lname;
  179.         EXEC SQL FETCH C2 INTO :fname2, :lname2;
  180.  
  181.         if (SQLCODE == 0) {
  182.             printf( "C1 %s %s\n", fname, lname );
  183.             printf( "C2 %s %s\n", fname2, lname2);
  184.             printf( "u)pdate  q)uit : ");
  185.             gets( reply );
  186.             if (_stricmp(reply, "q") == 0)
  187.                 break;
  188.             if (_stricmp(reply, "u") == 0) {
  189.                 printf( "New last name: ");
  190.                 gets( lname );
  191.                 EXEC SQL SET CONNECTION D1;
  192.                 EXEC SQL
  193.                 update author2 set au_lname=:lname
  194.                 WHERE CURRENT OF C1
  195.                 ;
  196.                 printf( "update1 sqlcode = %d\n", SQLCODE);
  197.                 EXEC SQL SET CONNECTION D2;
  198.                 EXEC SQL
  199.                 update author2 set au_lname=:lname
  200.                 WHERE CURRENT OF C2
  201.                 ;
  202.                 printf( "update2 sqlcode = %d\n", SQLCODE);
  203.             }
  204.         }
  205.  
  206.     }
  207.  
  208.     EXEC SQL CLOSE C1;
  209.     EXEC SQL CLOSE C2;
  210.  
  211.     // disconnect from SQL Server
  212.     EXEC SQL DISCONNECT ALL;
  213.  
  214.     return (0);
  215. }
  216.  
  217. ///////////////////////////////////////////////////////////////////////////////
  218. //
  219. //  FUNCTION: ErrorHandler()
  220. //
  221. //      Called on Embedded SQL for C error, displays fields from SQLCA
  222. //
  223. //  PARAMETERS: none
  224. //
  225. //  RETURNS: none
  226. //
  227. //  COMMENTS:
  228. //
  229. ///////////////////////////////////////////////////////////////////////////////
  230.  
  231. void ErrorHandler (void)
  232. {
  233.     // display error information from SQLCA
  234.     printf("Error Handler called:\n");
  235.     printf("    SQL Code = %li\n", SQLCODE);
  236.     printf("    SQL Server Message %li: '%Fs'\n", SQLERRD1, SQLERRMC);
  237. }
  238.