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

Windows编程

开发平台:

Visual C++

  1. /* example4.c */
  2. /*
  3. ** This example accesses the data within each row without using dbbind()
  4. ** and illustrates the use of row buffering.
  5. **
  6. ** It runs a query, saves all of the returned rows (up to a maximum
  7. ** of 100) using DB-LIBRARY row buffering, and allows the user to
  8. ** examine data rows at random.
  9. */
  10. #if defined(DBNTWIN32)
  11. #include <windows.h>
  12. #endif
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <sqlfront.h>
  16. #include <sqldb.h>
  17. DBPROCESS *dbproc; /* Our connection with SQL Server. */
  18. LOGINREC *login; /* Our login information. */
  19. #define TYPELEN 2
  20. #define DATELEN 25
  21. /* Forward declarations of the error handler and message handler.
  22. */
  23. int err_handler(DBPROCESS*, int, int, int, char*, char*);
  24. int msg_handler(DBPROCESS*, DBINT, int, int, char*);
  25. main(argc, argv)
  26. int argc;
  27. char *argv[];
  28. {
  29. /* Here are the variables which will be used to store the
  30. * data being examined.
  31. */
  32. DBCHAR name[MAXNAME+1]; /* MAXNAME is defined in
  33. * "sqldb.h" as the maximum
  34. * length for names of database
  35. * objects, such as tables,
  36. * columns, and procedures.
  37. */
  38. DBCHAR type[TYPELEN+1];
  39. DBINT id;
  40. DBCHAR datebuf[64];
  41. DBINT len;
  42. char numstring[32];
  43. int quitflag = 0;
  44. RETCODE row_code;
  45. DBINT rownum;
  46.         dbinit(); /* initialize dblib */
  47. /* Install the user-supplied error-handling and message-handling
  48. * functions. They are defined at the bottom of this source file.
  49. */
  50. dbmsghandle((DBMSGHANDLE_PROC)msg_handler);
  51. dberrhandle((DBERRHANDLE_PROC)err_handler);
  52. /*
  53. ** Get a LOGINREC structure and fill it with the necessary
  54. ** login information.
  55. */
  56. login = dblogin();
  57. DBSETLUSER (login, "user");
  58. DBSETLPWD(login, "my_passwd");
  59. DBSETLAPP(login, "example4");
  60. DBSETLVERSION(login, DBVER60);
  61. dbproc = dbopen(login, "my_server");
  62. dbcmd(dbproc, "select name, type, id, crdate from sysobjects");
  63. dbcmd(dbproc, " where type = 'S'");
  64. /*
  65.         ** Set row buffering to 100 rows, via dbsetopt().
  66. ** Note that this parameter must be passed as an ASCII string.
  67. */
  68. dbsetopt(dbproc, DBBUFFER, "100");
  69. dbsqlexec(dbproc);
  70. if (dbresults(dbproc) == SUCCEED)
  71. {
  72. /* Read all of the rows into DB-LIBRARY's buffer */
  73. while ((row_code = dbnextrow(dbproc)) != NO_MORE_ROWS)
  74. {
  75. /* If DB-LIBRARY's row buffer is full, throw
  76. * away the oldest row to allow the newest
  77. * row to be read in.
  78. */
  79. if (row_code == BUF_FULL)
  80. dbclrbuf(dbproc, (DBINT) 1);
  81. }
  82. /* Print out the column headers. */
  83. puts("NAME                 TYPE DATE                   ID");
  84. puts("-------------------- ---- ---------------------- ----");
  85. /* Let the user view any row in the table. */
  86. printf("Type the number of the row you want to see.n");
  87. printf("The first row is number 1.n");
  88. printf("Asking for row 0 will terminate the program.n");
  89. while (quitflag == 0)
  90. {
  91. printf("Row number: ");
  92. gets(numstring);
  93. rownum = atoi(numstring);
  94. if (rownum == 0)
  95. quitflag = 1;
  96. else
  97. {
  98. /* Print out the requested row. */
  99. if (dbgetrow(dbproc, rownum) == NO_MORE_ROWS)
  100. printf
  101. ("That row is not in the table.n");
  102. else
  103. {
  104. /* Copy variable-length character data
  105. * (colname).
  106. */
  107. strncpy
  108. (name, (DBCHAR *)dbdata(dbproc, 1),
  109. (len = dbdatlen(dbproc, 1)));
  110. /* String needs terminating null. */
  111. name[len] = '';
  112. /* Copy fixed-length character data. */
  113. strncpy
  114. (type, (DBCHAR *)dbdata(dbproc, 2),
  115. (len = dbdatlen(dbproc, 2)));
  116. type[len] = '';
  117. /* Copy integer data. */
  118. id = *((DBINT *)dbdata(dbproc, 3));
  119. /* Convert datetime data to a printable
  120. * string.
  121. */
  122. dbconvert(dbproc, SQLDATETIME, (dbdata(dbproc, 4)),
  123. (DBINT)-1, SQLCHAR, datebuf, (DBINT)-1);
  124. printf("%-20s %-4s %-22s %-4ld n",
  125. name, type, datebuf, id);
  126. }
  127. }
  128. }
  129. }
  130. dbexit();
  131. return(STDEXIT);
  132. }
  133. int err_handler(dbproc, severity, dberr, oserr, dberrstr, oserrstr)
  134. DBPROCESS *dbproc;
  135. int severity;
  136. int dberr;
  137. int oserr;
  138. char *dberrstr;
  139. char *oserrstr;
  140. {
  141.     printf("DB-LIBRARY error:nt%sn", dberrstr);
  142. if (oserr != DBNOERR)
  143. printf("Operating-system error:nt%sn", oserrstr);
  144. if ((dbproc == NULL) || (DBDEAD(dbproc)))
  145. return(INT_EXIT);
  146. return(INT_CANCEL);
  147. }
  148. int msg_handler(dbproc, msgno, msgstate, severity, msgtext)
  149. DBPROCESS *dbproc;
  150. DBINT msgno;
  151. int msgstate;
  152. int severity;
  153. char *msgtext;
  154. {
  155. printf
  156. ("SQL Server message %ld, state %d, severity %d:nt%sn",
  157. msgno, msgstate, severity, msgtext);
  158. return(0);
  159. }