짧은 Compile을 위한 Makefile 입니다
libdir=/usr/local/freetds/lib
includedir=/usr/local/freetds/include
LDADD=-L$(libdir) -I$(includedir) -ltds -lsybdb
samp : samp.c
gcc -O5 -o $@ $(LDADD) samp.c
을 풀어서 쓰면
gcc -O5 -o samp -L/usr/local/freetds/lib -I/usr/local/freetds/include -ltds -lsybdb samp.c 입니다.
그리고
syb_msg_handler -> Server로 부터 발생하는 각종 Msg을 받아서 처리하는 Handler입니다
syb_err_handler -> 각종 Error나 경고가 발생할 경우에 처리하는 Handler입니다.
syb_err_handler의 간단한 출력 Sample을 만들어 넣었습니다. 참고 바랍니다.
그리고 환경블럭에 설정하는 부분을 아래의 Sample에서는 프로그램이 동적으로 환경블럭을 설정하도록 만들었습니다. 참고하십시요... ^^
#include <stdio.h>
#include <stdlib.h>
#include "sybfront.h"
#include "sybdb.h"
static syb_msg_handler(dbproc,msgno,msgstate,severity,msgtext,srvname,procname,line)
DBPROCESS *dbproc;
DBINT msgno;
int msgstate;
int severity;
char *msgtext;
char *srvname;
char *procname;
int line;
{
/* ------- msg 출력 routine를 작성한다 ----------- */
}
static int syb_err_handler(dbproc,severity,dberr,oserr,dberrstr,oserrstr)
DBPROCESS *dbproc;
int severity;
int dberr;
int oserr;
char *dberrstr;
char *oserrstr;
{
/* ------- err msg 출력 routine를 작성한다 ----------- */
fprintf(stdout,"Severity : %d\nDBerror No : %d - %s\n",severity,dberr,dberrstr);
fprintf(stdout,"OSerror No : %d - %s ",oserr,oserrstr);
dbexit();
}
int main() {
LOGINREC *login; /* login information */
DBPROCESS *dbproc;
char ip_addr[40],ip_port[10];
int i, numCols;
char *teststr[8];
DBINT testint;
DBFLT8 flt;
int firstTimeForHeader = 1;
char *env_path; /* Enviroment Check */
/*---------- Enviroment Check & Set -------------- */
env_path = getenv("SYBASE");
if (env_path == NULL)
putenv("SYBASE=/usr/local/freetds");
/*------------------------------------------------ */
/* Fortify_EnterScope(); */
dbinit(); /* db-lib를 초기화한다 */
/* err-msg,msg handler를 등록한다 */
dberrhandle( syb_err_handler );
dbmsghandle( syb_msg_handler );
dbinit();
login = dblogin(); /* login record를 가져온다 */
DBSETLPWD(login,"guest"); /* login pass word set */
DBSETLUSER(login,"guest"); /* login id set */
DBSETLAPP(login,"TDS Lib Test"); /* server쪽에 넘겨줄 app name set */
DBSETLHOST(login,"Linuxer"); /* server쪽에 넘겨줄 host이름을 set */
/* 이 프로그램이 실행되는 컴이름 */
/* SQL Server로부터 DBPROCESS 구조체를 가져온다 */
/* 실질적인 연결이 이루어지는 부분입니다. */
dbproc = dbopen(login, "myserver");
/*
* 아래의 dbcmd는 command를 command buffer에 적재합니다 .
* 아직은 서버에 command가 전달되지 않은 상태입니다.
*/
/* dbcmd(dbproc,"select * from publishers where pub_id = '6666'\n"); */
/* dbcmd(dbproc,"select name from sysobjects\n"); */
/* ---------- 아래와 같이 사용해도됨 --------------- */
/* dbcmd(dbproc,"select * from floater"); */
/* dbcmd(dbproc," where pub_id = '6666'\n"); */
dbcmd(dbproc,"select count(*) from Autho\n");
/* server에 command를 전달하고 결과를 기다린다. */
dbsqlexec(dbproc);
/* ------ 이곳 while문에서 결과를 추출한다 ----------- */
while (dbresults(dbproc)!=NO_MORE_RESULTS) {
for (i=1;i<=dbnumcols(dbproc);i++) {
printf ("col %d is %s\n",i,dbcolname(dbproc,i));
}
dbbind(dbproc,1,INTBIND,-1,(BYTE *) &testint);
/* dbbind(dbproc,2,STRINGBIND,-1,(BYTE *) teststr);*/
/* dbbind(dbproc,1,FLT8BIND,-1,(BYTE *) &flt); */
while (dbnextrow(dbproc)!=NO_MORE_ROWS)
printf("%d\n",testint);
/* printf("%6.3g\n",flt);*/
/* printf("%s\n",teststr);*/
}
dbexit(); /* server와의 접속을 종료한다 */
return 0; /* keep lint happy */
}
|