[freetds] porting a windows program
Thomas Stover
thomas at wsinnovations.com
Tue Jul 17 16:50:14 EDT 2007
Hi all. I recently discovered FreeTDS, and hoped someone might be able
to help me out. I'm trying to port a win32-msdblib program to linux so
that I can debug an unrelated problem with the help of Valgrind. From
the comments on the FreeTDS homepage about the best source of
documentation being the MS/sybase docs, I figured that a simple msdblib
example might be a good place to start. I'm having a few issues with the
compile phase. Below is a simple windows-msdblib test program I had
lying around, along with my initial efforts to get this sucker to build
on Linux. The first problem is that I don't seem to be including the
correct header for the PDBPROCESS structure. I looked around in the
FreeTDS headers and saw DBPROCESS all over the place, so I tried a
"#define PDBPROCESS DBPROCESS" to no avail. The other big thing is that
I'm going from the MS doc's version of what error and message handlers
should look like. Clearly that part needs some work. Anyway any help
pointing me in the right direction would be much appreciate.
#include <stdio.h>
#include <sqlfront.h>
#include <sqldb.h>
int err_handler (PDBPROCESS dbproc, INT severity,
INT dberr, INT oserr, LPCSTR dberrstr, LPCSTR
oserrstr)
{
fprintf(stderr, "DB-Library Error %i: %\ns", dberr, dberrstr);
if (oserr != DBNOERR)
fprintf(stderr, "Operating System Error %i: %s\n", oserr, oserrstr);
return INT_CANCEL;
}
int msg_handler (PDBPROCESS dbproc, DBINT msgno, INT msgstate,
INT severity, LPCSTR msgtext, LPCSTR server,
LPCSTR procedure, DBUSMALLINT line)
{
fprintf(stderr, "SQL Server Message %ld: %s\n" , msgno, msgtext);
return 0;
}
int main(void)
{
PDBPROCESS dbproc;
PLOGINREC login;
int ncols, x;
char temp[512];
dberrhandle(err_handler);
dbmsghandle(msg_handler);
dbinit();
login = dblogin();
DBSETLSECURE(login);
DBSETLAPP(login, "dblib experiment program");
dbproc = dbopen(login, "192.168.9.143");
dbcmd(dbproc, "SELECT TOP 1 * From [TestDB] .. TestTable");
dbsqlexec(dbproc);
if(dbresults(dbproc) == SUCCEED)
{
ncols = dbnumcols(dbproc);
dbbind(dbproc, 1, NTBSTRINGBIND, 0, temp);
printf("Colum names:\n");
for(x = 1; x < ncols; x++)
{
printf("%s\t", dbcolname(dbproc, x));
}
printf("\n");
}
dbfreebuf(dbproc);
dbfreelogin(login);
dbexit();
return 0;
}
More information about the FreeTDS
mailing list