#define DBNTWIN32    // must identify operating system environment
#include "windows.h"#include <sqlfront.h>
#include <sqldb.h>    // DB-LIB header file (should always be included)
#include <stdio.h>
main ()
{
PDBPROCESS dbproc;  // allocate a DB-LIB process structure
PLOGINREC  login;   // allocate a DB-LIB login structure // Variables used to store the returning data
char       au_lname[41];
char       au_fname[20];
char       id[12];
char       phone[13];
char       address[41];
char       city[21];
char       state[3];
char       zip[6];
char       getname[41];
char       Servername[25];
RETCODE    result_code; // Forward declarations of the error handler and message handler.
    int err_handler(PDBPROCESS, int, int, int, char*, char*);
    int msg_handler(PDBPROCESS, DBINT, int, int, char*); if (dbinit() == (char *)NULL)
{
printf("Communications layer not loaded\n");
return(1);
}

// Install the user-supplied error-handling and message-handling
// routines. They are defined at the bottom of this source file.

dberrhandle((DBERRHANDLE_PROC)err_handler);
dbmsghandle((DBMSGHANDLE_PROC)msg_handler); // Get server's computer name
Servername[0] = '\0';
printf ("\nEnter Name of SQL Server: ");
gets (Servername); login = dblogin();                     // get login record from DB-LIB
DBSETLUSER (login, (char *)"sa");      // set the username
DBSETLAPP (login, (char *)"sqltestc"); // set the application name
DBSETLPWD (login, (char *)"");         // set the SQL Server password
DBSETLVERSION(login,DBVER60);
  // To use secure, or trusted, connection, uncomment the following line.
  // DBSETLSECURE (login); // Now attempt to create and initialize a DBPROCESS structure
if ((dbproc = dbopen (login, Servername)) == NULL)
{
printf ("dbopen failed\n");
return (1); // exit program
} dbuse (dbproc, "pubs"); // use the "pubs" database while (TRUE)
{
printf ("\nEnter author's last name to retrieve (return to exit): ");
gets (getname); if (getname[0] == '\0') // if only a return was entered
break; // construct command buffer to be sent to the SQL server
dbcmd (dbproc, (char *)"select au_id, au_lname, au_fname, phone,");
dbcmd (dbproc, (char *)" address, city, state, zip");
dbcmd (dbproc, (char *)" from authors");
dbcmd (dbproc, (char *)" where au_lname = '");
dbcmd (dbproc, (char *)getname);
dbcmd (dbproc, (char *)"'"); dbsqlexec (dbproc); // send command buffer to SQL server // now check the results from the SQL server
while ((result_code = dbresults(dbproc)) != NO_MORE_RESULTS)
{
if (result_code == SUCCEED)
{
dbbind (dbproc, 1, NTBSTRINGBIND, (DBINT) 0, (char *)id);
dbbind (dbproc, 2, NTBSTRINGBIND, (DBINT) 0, (char *)au_lname);
dbbind (dbproc, 3, NTBSTRINGBIND, (DBINT) 0, (char *)au_fname);
dbbind (dbproc, 4, NTBSTRINGBIND, (DBINT) 0, (char *)phone);
dbbind (dbproc, 5, NTBSTRINGBIND, (DBINT) 0, (char *)address);
dbbind (dbproc, 6, NTBSTRINGBIND, (DBINT) 0, (char *)city);
dbbind (dbproc, 7, NTBSTRINGBIND, (DBINT) 0, (char *)state);
dbbind (dbproc, 8, NTBSTRINGBIND, (DBINT) 0, (char *)zip); // now process the rows
while (dbnextrow(dbproc) != NO_MORE_ROWS)
{
printf ("Author ID:  %s\n", id);
printf ("Last Name:  %s\n", au_lname);
printf ("First Name: %s\n", au_fname);
printf ("Address:    %s\n", address);
printf ("City:       %s\n", city);
printf ("State:      %s\n", state);
printf ("Zip Code:   %s\n", zip);
printf ("Telephone:  %s\n", phone);
printf ("\n");
}
}
else
{
printf ("Results Failed\n");
break;
}
}
} // while (TRUE) // Close the connection and exit
dbexit();  return (0); 
}int err_handler(PDBPROCESS dbproc, int severity, int dberr, int oserr, char * dberrstr, char * oserrstr)
{
if (dberrstr != NULL)
printf("DB-LIBRARY error:\n\t%s\n", dberrstr); if (oserr != DBNOERR)
printf("Operating-system error:\n\t%s\n", oserrstr); if ((dbproc == NULL) || (DBDEAD(dbproc)))
return(INT_EXIT);
else
return(INT_CANCEL);
}int msg_handler(PDBPROCESS dbproc, DBINT msgno, int msgstate, int severity, char * msgtext)
{
printf("SQL Server message %ld, state %d, severity %d:\n\t%s\n",
msgno, msgstate, severity, msgtext);
return(0);
}In the call to dbopen, DB-Library uses the server name and connection information in the [SQLSERVER] section of Win.ini, or the following subtree of the Windows NT 4.0 Registry:HKEY_LOCAL_MACHINE\
    SOFTWARE\
        Microsoft\
            MSSQLServer\
                Client\
                    ConnectToUse the SQL Server Client Network Utility to configure server name and connection information.Note also that the SQL Server ODBC driver uses the same Net-Library mechanism as DB-Library.

解决方案 »

  1.   


    1 动态sql预备语句EXEC SQL PREPARE <动态sql语句名> FROM <共享变量或字符串>2 动态执行SQL语句EXEC SQL EXECUTE <动态sql语句名>当预备语句中组合而成的SQL语句只需要执行一次时,那么预备语句和执行语句可以合并为EXEC SQL EXECUTE IMMEDIATE <共享变量或字符串>
    当预备语句中组合而成的SQL语句条件缺值时,在执行语句中用USING断语补上EXEC SQL EXECUTE <动态sql语句名> USING <共享变量>例子1EXEC SQL BEGIN DECLARE SECTION     CHAR *qureyEXEC SQL END   DECLARE SECTIONscanf("%s",query);EXEC SQL PERPARE que FROM : query;EXEC SQL EXECUTE que;如果执行一次,那么
    EXEC SQL EXECUTE IMMEDIATE : query;
    例子2char *query=" UPDATE tablename SET columnname='a' where column=?";
    EXEC SQL PERPARE que FROM : query;
    char c[5]="c4";
    EXEC SQL EXECUTE que USING : c//用c替代?--摘录自系统设计师教程