EXAMPLE8.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /* ** The example uses the following stored procedure, 
  2. ** named "rpctest", which it assumes is located in the 
  3. ** user's default database. Before running this example, 
  4. ** you must create "rpctest" in your default database.
  5. **
  6. **     create procedure rpctest
  7. **         (@param1 int out,
  8. **          @param2 int out,
  9. **          @param3 int out,
  10. **          @param4 int)
  11. **     as
  12. **     begin
  13. **         select "rpctest is running."
  14. **         select @param1 = 11
  15. **         select @param2 = 22
  16. **         select @param3 = 33
  17. **         select @param1
  18. **
  19. **         return 123
  20. **     end
  21. **
  22. */
  23. #if defined(DBNTWIN32)
  24. #include <windows.h>
  25. #endif
  26. #include <stdio.h> 
  27. #include <stdlib.h> 
  28. #include <sqlfront.h> 
  29. #include <sqldb.h> 
  30. #define FMTSTR    "%-8.8s %-8.8s %-8.8s %-8.8sn"
  31. #define FMTSTR1    "%-8.8s %-8.8s %8.8ld %8.8ldn"
  32. /* Forward declarations of the error handler and message handler routines. */
  33. int err_handler(DBPROCESS*, int, int, int, char*, char*);
  34. int msg_handler(DBPROCESS*, DBINT, int, int, char*, char*, char*, DBUSMALLINT);
  35. void main()
  36. {
  37. LOGINREC         *login;
  38. DBPROCESS        *dbproc;
  39. int              i;
  40. int              numrets;
  41. DBINT            param1 = 1;
  42. DBINT            param2 = 2;
  43. DBINT            param3 = 3;
  44. DBINT            param4 = 4;
  45. RETCODE          return_code;
  46.    /* Initialize private DB Library structures. */
  47. dbinit();
  48. /* Install the user-supplied error-handling and message-handling
  49.  * routines. They are defined at the bottom of this source file.
  50.  */
  51. dbmsghandle((DBMSGHANDLE_PROC)msg_handler);
  52. dberrhandle((DBERRHANDLE_PROC)err_handler);
  53. /* Allocate and initialize the LOGINREC structure to be used
  54.  * to open a connection to SQL Server.
  55.  */
  56. login = dblogin( );
  57. DBSETLUSER(login, "user");
  58. DBSETLPWD(login, "my_passwd");
  59. DBSETLAPP(login, "rpcexample");
  60. DBSETLVERSION(login, DBVER60);
  61. dbproc = dbopen(login, (char *)"my_server");
  62. /* Make the rpc. */
  63. if (dbrpcinit(dbproc, "rpctest", (DBSMALLINT)0) == FAIL)
  64. {
  65. printf("dbrpcinit failed.n");
  66. dbexit();
  67. exit(ERREXIT);
  68. }
  69. if (dbrpcparam(dbproc, "@param1", (BYTE)DBRPCRETURN, SQLINT4, 
  70. -1, -1, (BYTE *)&param1)
  71.    == FAIL)
  72. {
  73. printf("dbrpcparam failed.n");
  74. dbexit();
  75. exit(ERREXIT);
  76. }
  77. if (dbrpcparam(dbproc, "@param2", (BYTE)DBRPCRETURN, SQLINT4, 
  78. -1, -1,  (BYTE *)&param2)
  79.    == FAIL)
  80. {
  81. printf("dbrpcparam failed.n");
  82. dbexit();
  83. exit(ERREXIT);
  84. }
  85. if (dbrpcparam(dbproc, "@param3", (BYTE)DBRPCRETURN, SQLINT4, 
  86. -1, -1, (BYTE *)&param3)
  87.    == FAIL)
  88. {
  89. printf("dbrpcparam failed.n");
  90. dbexit();
  91. exit(ERREXIT);
  92. }
  93. if (dbrpcparam(dbproc, "@param4", (BYTE)NULL, SQLINT4, 
  94. -1, -1, (BYTE *)&param4)
  95.    == FAIL)
  96. {
  97. printf("dbrpcparam failed.n");
  98. dbexit();
  99. exit(ERREXIT);
  100. }
  101. if (dbrpcsend(dbproc) == FAIL)
  102. {
  103. printf("dbrpcsend failed.n");
  104. dbexit();
  105. exit(ERREXIT);
  106. }
  107. if (dbsqlok(dbproc) == FAIL)
  108. {
  109. printf("dbsqlok failed.n");
  110. dbexit();
  111. exit(ERREXIT);
  112. }
  113. while ((return_code = dbresults(dbproc)) != NO_MORE_RESULTS)
  114. {
  115. if (return_code == FAIL)
  116. {
  117. printf("dbresults failed.n");
  118. dbexit();
  119. exit(ERREXIT);
  120. }
  121. /* Print any rows that may have been returned. */
  122. dbprrow(dbproc);
  123. /* Examine any return parameters that may have arrived. */
  124. numrets = dbnumrets(dbproc);
  125. printf("%d return values received.nn", numrets);
  126. if (numrets != 0)
  127. {
  128. printf
  129.  (FMTSTR, "Name", "Type", "Length", "Value");
  130. printf
  131.  (FMTSTR,
  132.  "------------", "------------",
  133.  "------------", "------------");
  134.     for (i = 1; i <= numrets; i++)
  135.       {
  136.     printf
  137.     (FMTSTR1, dbretname(dbproc, i),
  138.    dbprtype(dbrettype(dbproc, i)), dbretlen(dbproc, i),
  139.     *((DBINT *)(dbretdata(dbproc, i))));
  140.     }
  141. }
  142. if (dbhasretstat(dbproc))
  143. printf("Return status = %ldn", dbretstatus(dbproc));
  144. else
  145. printf("No return status for this command.n");
  146. }
  147. dbexit();
  148. }
  149. int err_handler(dbproc, severity, dberr, oserr, dberrstr, oserrstr)
  150. DBPROCESS       *dbproc;
  151. int             severity;
  152. int             dberr;
  153. int             oserr;
  154. char            *dberrstr;
  155. char            *oserrstr;
  156. {
  157. if (dberrstr != NULL)  printf("DB-Library error:nt%sn", dberrstr);
  158. if (oserr != DBNOERR)
  159. printf("Operating-system error:nt%sn", oserrstr);
  160. if ((dbproc == NULL) || (DBDEAD(dbproc)))
  161. return(INT_EXIT);
  162. else 
  163. {
  164. return(INT_CANCEL);
  165. }
  166. }
  167. int msg_handler(dbproc, msgno, msgstate, severity, msgtext,
  168. srvname, procname, line)
  169. DBPROCESS *dbproc;
  170. DBINT msgno;
  171. int msgstate;
  172. int severity;
  173. char *msgtext;
  174. char *srvname;
  175. char *procname;
  176. DBUSMALLINT line;
  177. {
  178. printf ("Msg %ld, Level %d, State %dn", 
  179. msgno, severity, msgstate);
  180. if (srvname !=  NULL)
  181. printf ("Server '%s', ", srvname);
  182. if (procname !=  NULL)
  183. printf ("Procedure '%s', ", procname);
  184. if (line !=  0)
  185. printf ("Line %d", line);
  186. printf("nt%sn", msgtext);
  187. return(0);
  188. }