home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Internet Business Development Kit / PRODUCT_CD.iso / sqlsvr / esqlc / esql / samples.c / example3.sqc < prev    next >
Encoding:
Text File  |  1995-11-21  |  4.3 KB  |  168 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  FILE: example3.sqc
  4. //              
  5. //      Sample Embedded SQL for C application
  6. //
  7. //      This example demonstrates the technique of using a dummy update
  8. //      to prevent other users from updating a row
  9. //
  10. //  FUNCTIONS:
  11. //
  12. //      main() - Main program
  13. //      ErrorHandler - Embedded SQL for C error handler
  14. //
  15. //  COMMENTS:
  16. //
  17. //      Copyright (C) 1992 - 1994 Microsoft Corporation
  18. //
  19. ///////////////////////////////////////////////////////////////////////////////
  20.  
  21. // function prototypes (instead of header file)
  22. void ErrorHandler (void);
  23.  
  24. #include <stddef.h>         // standard C run-time header
  25. #include <stdio.h>          // standard C run-time header
  26. #include "gcutil.h"         // utility header
  27.  
  28. // GLOBAL VARIABLES
  29.  
  30. ///////////////////////////////////////////////////////////////////////////////
  31. //
  32. //  FUNCTION: main()
  33. //
  34. //      Main application
  35. //
  36. //  PARAMETERS:
  37. //
  38. //      argc - count of command line args
  39. //      argv - array of command line argument strings
  40. //      envp - array of environment strings
  41. //
  42. //  RETURNS: 0 if successful, 1 if error
  43. //
  44. //  COMMENTS:
  45. //
  46. ///////////////////////////////////////////////////////////////////////////////
  47.  
  48. int main (
  49.     int argc,
  50.     char** argv,
  51.     char** envp)
  52. {
  53.     int nRet;           // for return values
  54.     char replystr[10];
  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 fname[21];
  61.     char lname[41];
  62.     EXEC SQL END DECLARE SECTION;
  63.  
  64.     // install Embedded SQL for C error handler
  65.     EXEC SQL WHENEVER SQLERROR CALL ErrorHandler();
  66.     // set Embedded SQL for C options
  67.     EXEC SQL SET OPTION LOGINTIME 10;
  68.     EXEC SQL SET OPTION QUERYTIME 100;
  69.  
  70.     // display logo
  71.     printf("Sample Embedded SQL for C application\n");
  72.  
  73.     // get info for CONNECT TO statement
  74.     nRet = GetConnectToInfo(argc, argv,
  75.         szServerDatabase,
  76.         szLoginPassword);
  77.     if (!nRet)
  78.     {
  79.         return (1);
  80.     }
  81.  
  82.     // attempt connection to SQL Server
  83.     EXEC SQL CONNECT TO :szServerDatabase
  84.         USER :szLoginPassword;
  85.     if (SQLCODE == 0)
  86.     {
  87.         printf("Connection to SQL Server established\n");
  88.     }
  89.     else
  90.     {
  91.         // problem connecting to SQL Server
  92.         printf("ERROR: Connection to SQL Server failed\n");
  93.         return (1);
  94.     }
  95.  
  96.     EXEC SQL SET CURSORTYPE CUR_STANDARD;
  97.  
  98.     EXEC SQL DECLARE C1 CURSOR FOR
  99.         select au_fname, au_lname from author2;
  100.  
  101.     EXEC SQL OPEN C1;
  102.  
  103.     while (SQLCODE == 0)
  104.     {
  105.  
  106.         EXEC SQL FETCH C1 INTO :fname, :lname;
  107.  
  108.         if (SQLCODE == 0)
  109.         {
  110.             printf("%s %s\tu)pdate   q)uit : ", fname, lname);
  111.             gets( replystr );
  112.             if ( *replystr == 'q' )
  113.                 break;
  114.             if ( *replystr == 'u' ) {
  115.                 EXEC SQL BEGIN TRAN;
  116.                 EXEC SQL
  117.                     update author2 set au_lname=au_lname
  118.                     WHERE CURRENT OF C1
  119.                 ;
  120.                 printf( "Dummy update: %d\n", SQLCODE);
  121.                 printf( "New last name? ");
  122.                 gets( lname );
  123.                 EXEC SQL
  124.                     update author2 set au_lname=:lname
  125.                     WHERE CURRENT OF C1
  126.                 ;
  127.                 if (SQLCODE != 0)
  128.                 {
  129.                     printf("ERROR: Update failed\n");
  130.                 }
  131.                 EXEC SQL COMMIT TRAN;
  132.  
  133.             }
  134.         }
  135.  
  136.     }   // end while
  137.  
  138.     // close the cursor
  139.     EXEC SQL CLOSE C1;
  140.  
  141.     // disconnect from SQL Server
  142.     EXEC SQL DISCONNECT ALL;
  143.  
  144.     return (0);
  145. }
  146.  
  147. ///////////////////////////////////////////////////////////////////////////////
  148. //
  149. //  FUNCTION: ErrorHandler()
  150. //
  151. //      Called on Embedded SQL for C error, displays fields from SQLCA
  152. //
  153. //  PARAMETERS: none
  154. //
  155. //  RETURNS: none
  156. //
  157. //  COMMENTS:
  158. //
  159. ///////////////////////////////////////////////////////////////////////////////
  160.  
  161. void ErrorHandler (void)
  162. {
  163.     // display error information from SQLCA
  164.     printf("Error Handler called:\n");
  165.     printf("    SQL Code = %li\n", SQLCODE);
  166.     printf("    SQL Server Message %li: '%Fs'\n", SQLERRD1, SQLERRMC);
  167. }
  168.