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

Windows编程

开发平台:

Visual C++

  1. /* example2.c */
  2. /*
  3. ** This example opens a data file, inserts data from the file
  4. ** into a newly created table containing several of the
  5. ** SQL Server datatypes, and binds and prints the results.
  6. ** You must have a file named datafile and CREATE DATABASE
  7. ** permission in your login database.  Also you must have enough room
  8. ** in your default device to create a new database (minimum 2Mb).
  9. */
  10. #if defined(DBNTWIN32)
  11. #include <windows.h>
  12. #endif
  13. #include <stdio.h>
  14. #include <sqlfront.h>
  15. #include <sqldb.h>
  16. #define BUFLEN 2048
  17. #define HEXLEN 510
  18. #define PLEN 25
  19. #define SALESLEN 11
  20. /* Forward declarations of the error handler and message handler functions.
  21. */
  22. int err_handler(DBPROCESS*, int, int, int, char*, char*);
  23. int msg_handler(DBPROCESS*, DBINT, int, int, char*);
  24. main(argc,argv)
  25. int argc;
  26. char *argv[];
  27. {
  28. LOGINREC *login;
  29. DBPROCESS *dbproc;
  30. RETCODE return_code;
  31. DBTINYINT age;
  32. DBSMALLINT userid;
  33. DBINT royalty;
  34. DBCHAR name[PLEN+1];
  35. DBBINARY title_id[PLEN+1];
  36. DBBIT us_citizen;
  37. DBFLT8 account;
  38. DBCHAR title[PLEN+1]; /* string */
  39. DBCHAR manager[PLEN+1]; /* ntbstring */
  40. DBCHAR id_buffer[HEXLEN+1];
  41. DBCHAR   sales_buffer[SALESLEN+1];
  42. DBDECIMAL sales;
  43. static char cmdbuf[BUFLEN];
  44. FILE *infile;
  45.         dbinit(); /* initialize dblib */
  46. /* Install the user-supplied error-handling and message-handling
  47. * functions. They are defined at the bottom of this source file.
  48. */
  49. dbmsghandle((DBMSGHANDLE_PROC)msg_handler);
  50. dberrhandle((DBERRHANDLE_PROC)err_handler);
  51. /* Allocate and initialize the LOGINREC structure to be used
  52. * to open a connection to SQL Server.
  53. */
  54. login = dblogin();
  55. DBSETLUSER(login, "user");
  56. DBSETLPWD(login, "my_passwd");
  57. DBSETLAPP(login, "example2");
  58. DBSETLVERSION(login, DBVER60);
  59. dbproc = dbopen(login, "my_server");
  60. printf("Creating the 'test' database.n");
  61. dbcmd(dbproc,"create database test ");
  62. dbsqlexec(dbproc);
  63. dbresults(dbproc);
  64. dbuse(dbproc,"test");
  65. printf("Creating the 'alltypes' table.n");
  66. /* Create a table that contains several SQL Server datatypes. */
  67. dbcmd(dbproc,"create table alltypes ");
  68. dbcmd(dbproc,"(age tinyint,");
  69. dbcmd(dbproc,"userid smallint,");
  70. dbcmd(dbproc,"royalty int,");
  71. dbcmd(dbproc,"name char(25),");
  72. dbcmd(dbproc,"title_id varbinary(20),");
  73. dbcmd(dbproc,"us_citizen bit,");
  74. dbcmd(dbproc,"account float,");
  75. dbcmd(dbproc,"title varchar(20),");
  76. dbcmd(dbproc,"manager char(25),");
  77. dbcmd(dbproc,"sales decimal(10,2))");
  78. dbsqlexec(dbproc);
  79. dbresults(dbproc);
  80. /* Insert rows of data into the newly created table "alltypes".
  81. * We will read in the contents of the file and form an
  82. * INSERT statement.
  83. */
  84. if ((infile=fopen("datafile","r")) == NULL)
  85. {
  86. printf("Unable to open file 'datafile'.n");
  87. return(STDEXIT);
  88. }
  89. printf("Inserting rows into the 'alltypes' table.n");
  90. while ((fgets(cmdbuf,BUFLEN,infile)) != NULL)
  91. {
  92. dbfcmd(dbproc,"insert into alltypes n");
  93. dbfcmd(dbproc,"values(%s) n",cmdbuf);
  94. }
  95. dbsqlexec(dbproc);
  96. /* Process the results of each of the INSERT statements. */
  97. while ((return_code = dbresults(dbproc)) != NO_MORE_RESULTS)
  98. {
  99. if (return_code == FAIL)
  100. printf("One of the insert statements failed.n");
  101. }
  102. printf("Selecting rows from the 'alltypes' table:n");
  103. dbcmd(dbproc,"select * from alltypes");
  104. dbsqlexec(dbproc);
  105. /* Initialize the DBDECIMAL structure so binding and conversions will use defaults */
  106. sales.precision = 0;
  107. sales.scale = 0;
  108. while ((return_code = dbresults(dbproc)) != NO_MORE_RESULTS)
  109. {
  110. if (return_code == SUCCEED)
  111. {
  112. dbbind(dbproc,1,TINYBIND, (DBINT) 0,(BYTE *) &age);
  113. dbbind(dbproc,2,SMALLBIND, (DBINT) 0,(BYTE *) &userid);
  114. dbbind(dbproc,3,INTBIND, (DBINT) 0,(BYTE *) &royalty);
  115. dbbind(dbproc,4,CHARBIND, (DBINT) 0,name);
  116. dbbind(dbproc,5,BINARYBIND, (DBINT) 0,title_id);
  117. dbbind(dbproc,6,BITBIND, (DBINT) 0,(BYTE *) &us_citizen);
  118. dbbind(dbproc,7,FLT8BIND, (DBINT) 0,(BYTE *) &account);
  119. dbbind(dbproc,8,STRINGBIND, (DBINT) 0,title);
  120. dbbind(dbproc,9,NTBSTRINGBIND, (DBINT) 0,manager);
  121. dbbind(dbproc,10,DECIMALBIND, (DBINT) 0, (BYTE *)&sales);
  122. /*
  123. ** Initialize null terminator in "name" array,
  124. ** since CHARBIND does not add one.
  125. */
  126. name[PLEN] = '';
  127. while (dbnextrow(dbproc) != NO_MORE_ROWS)
  128. {
  129. dbconvert (dbproc, SQLBINARY, title_id, dbdatlen(dbproc, 5), SQLCHAR, id_buffer, (DBINT)-1);
  130. dbconvert (dbproc, SQLDECIMAL, (BYTE *)&sales, sizeof(DBDECIMAL), SQLCHAR, sales_buffer, (DBINT)-1);
  131. printf
  132. ("%d %d %ld %s 0x%sn",
  133. age, userid, royalty, name, id_buffer);
  134. printf
  135. ("%d %8.2f %s %s %sn",
  136. us_citizen, account, title, manager, sales_buffer);
  137. }
  138. }
  139. }
  140. dbexit();
  141. return(STDEXIT);
  142. }
  143. int err_handler(dbproc, severity, dberr, oserr, dberrstr, oserrstr)
  144. DBPROCESS *dbproc;
  145. int severity;
  146. int dberr;
  147. int oserr;
  148. char *dberrstr;
  149. char *oserrstr;
  150. {
  151.     printf("DB-LIBRARY error:nt%sn", dberrstr);
  152. if (oserr != DBNOERR)
  153. printf("Operating-system error:nt%sn", oserrstr);
  154. if ((dbproc == NULL) || (DBDEAD(dbproc)))
  155. return(INT_EXIT);
  156. return(INT_CANCEL);
  157. }
  158. int msg_handler(dbproc, msgno, msgstate, severity, msgtext)
  159. DBPROCESS *dbproc;
  160. DBINT msgno;
  161. int msgstate;
  162. int severity;
  163. char *msgtext;
  164. {
  165. printf
  166. ("SQL Server message %ld, state %d, severity %d:nt%sn",
  167. msgno, msgstate, severity, msgtext);
  168. return(0);
  169. }