Chinaunix首页 | 论坛 | 博客
  • 博客访问: 245565
  • 博文数量: 20
  • 博客积分: 1530
  • 博客等级: 上尉
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-31 16:26
文章分类

全部博文(20)

文章存档

2018年(2)

2012年(1)

2011年(4)

2010年(5)

2009年(2)

2008年(6)

我的朋友

分类: LINUX

2011-10-31 15:02:06

#include
#include
#include
#include
#include


#include
#include

static void usage()
{
    printf("Usage : testdb [-s|-u|-p|-d|-e|-f|-h]\n"
       "\t -s   MSSQLServer server name \n"
       "\t -u   login user name\n"
       "\t -p   login user password\n"
       "\t -d   default database\n"
       "\t -e   enable SSL [-e yes]\n"
       "\t -f   test db connection with a configuration file \n"
       "\t -h   show help info\n");
     exit( 0 );
}
struct {
    char *appname, *servername, *dbname, *username, *password, *encrypt;
} options = {0,0,0,0,0,0};

int msg_handler(DBPROCESS *dbproc, DBINT msgno, int msgstate, int severity,
    char *msgtext, char *srvname, char *procname, int line)
{                                   
    enum {changed_database = 5701, changed_language = 5703 };   
   
    if (msgno == changed_database || msgno == changed_language)
        return 0;
   
    if (msgno > 0) {
        fprintf(stderr, "Msg %ld, Level %d, State %d\n",
                (long) msgno, severity, msgstate);
   
        if (strlen(srvname) > 0)
            fprintf(stderr, "Server '%s', ", srvname);
        if (strlen(procname) > 0)
            fprintf(stderr, "Procedure '%s', ", procname);
        if (line > 0)
            fprintf(stderr, "Line %d", line);
   
        fprintf(stderr, "\n\t");
    }
    fprintf(stderr, "%s\n", msgtext);
   
    if (severity > 10) {                       
        fprintf(stderr, "%s: error: severity %d > 10, exiting\n",
            options.appname, severity);
        exit(severity);
    }
   
    return 0;                           
}
   
int err_handler(DBPROCESS * dbproc, int severity, int dberr, int oserr,
    char *dberrstr, char *oserrstr)
{                                   
    if (dberr) {                           
        fprintf(stderr, "%s: Msg %d, Level %d\n",
            options.appname, dberr, severity);
        fprintf(stderr, "%s\n\n", dberrstr);
    }
    else {
        fprintf(stderr, "%s: DB-LIBRARY error:\n\t", options.appname);
        fprintf(stderr, "%s\n", dberrstr);
    }
   
    return INT_CANCEL;                       
}


extern char *optarg;
extern int optind;

int main(int argc, char **argv)
{
    DBINT result;
    char sql_cmd[1024]={0};
    DBPROCESS *dbproc = NULL;
    LOGINREC *pdblogin = NULL;
    char szEnv[1024] = {0};
    int ch;
    int bFile = 0;

    if(argc < 4)
       usage();  

    while (( ch = getopt(argc, argv, "u:p:s:d:e:f:h:")) != -1)
    {
        switch(ch)
        {
        case 's':
            options.servername = strdup(optarg);
            break;
        case 'd':
            options.dbname = strdup(optarg);
            break;
        case 'u':
            options.username = strdup(optarg);
            break;
        case 'p':
            options.password = strdup(optarg);
            break;
        case 'e':
            options.encrypt = strdup(optarg);
            break;
        case 'f':
            sprintf(szEnv, "FREETDSCONF=%s", optarg);
            bFile = 1;
            char *pEnv = strdup(szEnv);
            putenv(pEnv);
            break;
        case 'h':
            usage();
        default:
            usage();
        }
    }
    options.appname = (char*)basename(argv[0]);

    if (dbinit() == FAIL) {
        printf("dbinit() failed\n");
        dberrhandle(err_handler);
        dbmsghandle(msg_handler);
        return -1;
    }

    pdblogin = dblogin();
    if (pdblogin == NULL){
        printf("Failed to init dblogin\n");
        dberrhandle(err_handler);
        dbmsghandle(msg_handler);
        return -1;
    }

    DBSETLUSER(pdblogin, options.username);
    DBSETLPWD(pdblogin, options.password);
  
    if(NULL == options.dbname )
    {
        options.dbname = "master";
    }
    DBSETLAPP(pdblogin, options.dbname);
     
    if((NULL != options.encrypt) &&  (strcmp(options.encrypt, "yes") == 0))
    {
        DBSETLENCRYPT(pdblogin, TRUE);
    }

    if(bFile)
    {
        dbproc = dbopen(pdblogin, "MyMSSQLServer");
    }
    else
    {
        dbproc = dbopen(pdblogin, options.servername);
    }

    if (dbproc == NULL) {
        printf("Failed to dbopen \n");
        dberrhandle(err_handler);
        dbmsghandle(msg_handler);
        return  -1;
    }

    if ((result = dbuse(dbproc, "master")) == FAIL) {
        printf("Unable to use to database master\n");
        dberrhandle(err_handler);
        dbmsghandle(msg_handler);
        return -1;
    }

    sprintf(sql_cmd,"select db_name()");
    dbcmd(dbproc, sql_cmd);
    if (FAIL == dbsqlexec (dbproc))
    {
        printf("Unable to set exec sql command %s\n",sql_cmd);
        dberrhandle(err_handler);
        dbmsghandle(msg_handler);
        return -1;
    }
    char szResult[1024];
    memset(szResult, 0, sizeof(szResult));

    while((result = dbresults(dbproc)) !=  NO_MORE_RESULTS)
    {
        if(result = SUCCEED)
        {
            dbbind(dbproc, 1, CHARBIND, (DBCHAR)0, (BYTE *)szResult);
            while(dbnextrow(dbproc) != NO_MORE_ROWS)
            {
                printf("szResult = [%s]\n", szResult);
                break;
            }
            break;
        }
        else
        {
            printf("dbresult failed, code:%d\n", result);
            dberrhandle(err_handler);
            dbmsghandle(msg_handler);
            break;
        }
    }

    if (dbproc){
        dbclose (dbproc);
        dbproc = NULL;
    }
    if (pdblogin){
        dbloginfree(pdblogin);
        pdblogin = NULL;
    }
    return 0;
}
Compile the program by below command:
 
gcc testdb.c -o testdb -L/usr/lib/ -lsybdb

阅读(2323) | 评论(0) | 转发(0) |
0

上一篇:pipe 实例

下一篇:DNS 解析编程实例

给主人留下些什么吧!~~