Call-level Method

SQL Server programs that are written using the DB-Library or ODBC API methods communicate directly with SQL Server through C function calls. DB-Library or ODBC functions pass SQL statements to SQL Server and return the results of queries. The call-level method of programming requires no precompiler; however, you cannot include Transact SQL statements in your C programs, like you can with Embedded SQL.

For example, to use DB-Library to connect to SQL Server and execute a simple query using the pubs sample database requires source code similar to the following:


#define DBNTWIN32
#include <sqlfront.h>
#include <sqldb.h>

main()
{
    DBPROCESS *dbproc;
    LOGINREC *login;
    RETCODE r;

    dbinit();
    login = dblogin();
    if (login == NULL)
        return (1);
    DBSETLUSER(login, "my_login");
    DBSETLPWD(login, "my_password");
    dbproc = dbopen(login, "my_server");
    dbfreelogin(login);
    if (dbproc == NULL)
        return (1);
    dbuse(dbproc, "pubs");
    dbcmd(dbproc,
        "select au_fname from authors where au_lname = 'White'");
    r = dbsqlexec(dbproc);
    if (r == FAIL)
        return (1);
    while (1)
    {
        r = dbresults(dbproc);
        if (r == SUCCEED)
        {
            /* Process the rows with dbnextrow() */
        }
        if ((r == FAIL) || (r == NO_MORE_RESULTS))
            break;
    }
    return (0);
}

The DB-Library approach, using C function calls, is more verbose and more flexible than the Embedded SQL approach, and it can be loosely coupled to any database structure. Because a great deal of the program's behavior can be changed dynamically, DB-Library programs are often general-purpose applications. DB-Library is well suited for environments where the database structure is not known in advance.