Linux C语言连接 sqlserver数据库

记录一下Linux下使用C语言连接sqlserver的方法。

连接前需要安装freetds。

参考:

http://www.cnblogs.com/helloworldtoyou/p/6910075.html

http://blog.csdn.net/neighbor1000/article/details/8824084

http://blog.csdn.net/pinkbean/article/details/64439759

这个是从参考链接中的提取代码。分析一下,写上注释。

#include<stdio.h>  
#include<string.h>  
#include<stdlib.h>  
#include<unistd.h>  
#include<sybfront.h>  
#include<sybdb.h>  

int main(void)  
{    
    char szUsername[32]= "Tony";  
    char szPassword[32]= "tony";  
    char szDBName[32]= "gpio";  
    char szServer[32]= "192.168.1.221:1433";        //服务器ip地址和端口号  
  
    //初始化db-library  
    dbinit();  
    //连接数据库  
    LOGINREC *loginrec=dblogin();  
	// 设置登录的用户名
    DBSETLUSER(loginrec,szUsername);  
	// 设置登录密码
    DBSETLPWD(loginrec,szPassword);  
	// 连接sqlserver服务器地址和端口号,这里才是连接
    DBPROCESS *dbprocess=dbopen(loginrec,szServer);  
    if(dbprocess==FAIL){  
        printf("Connect MSSQLSERVER fail\n");  
        return 0;  
    }else{  
        printf("Connect MSSQLSERVER success\n");  
    }  
	// 连接数据库
    if(dbuse(dbprocess,szDBName)==FAIL){  
        printf("Open data basename fail\n");  
    }else{  
        printf("Open data basename success\n");  
    }  
    // 查询数据库中表中的内容
    dbcmd(dbprocess,"select * from real_date_log");  //查询数据表中的内容,更具实际情况更改数据表名称  
	// 执行命令
    if(dbsqlexec(dbprocess)==FAIL){  
        printf("Query table error\n");  
    }  
    else   
        printf("Query table success\n");  
  
    DBINT result_code;  
    char szID[1024];  
    char szBeginTime[1024];  
    char szDescription[1024];  
	// 查看命令执行的结果。
    while((result_code=dbresults(dbprocess))!=NO_MORE_RESULTS)  
    {  
        if(result_code==SUCCEED){  
			// 查询第1列
            dbbind(dbprocess,1,CHARBIND,(DBINT)0,(BYTE*)szID);  
			// 查询第2列
            dbbind(dbprocess,2,CHARBIND,(DBCHAR)0,(BYTE*)szBeginTime);  
			// 查询第3列
            dbbind(dbprocess,3,CHARBIND,(DBCHAR)0,(BYTE*)szDescription);  
			// 跳到下一行
            while(dbnextrow(dbprocess)!=NO_MORE_ROWS){  
				// 打印本行的数据
                printf("ID=%s\n",szID);  
                printf("szAid=%s\n",szBeginTime);  
                printf("szBeginTime=%s\n",szDescription);  
            }  
        }  
    }  
  
    //关闭数据库连接  
    dbclose(dbprocess);  
    return 0;  
}

编译

gcc -o testsybase testsybase.c -L /usr/local/freetds7.0/lib/ -lsybdb -I /usr/local/freetds7.0/include/

执行

export LD_LIBRARY_PATH=/usr/local/freetds7.0/lib/  
./testsybase 

Tony Liu

2017-5-26, Shenzhen

posted @   SuperTao1024  阅读(2619)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
历史上的今天:
2016-05-26 gpio irq
2016-05-26 am335x hid-multitouch.c
2016-05-26 implicit declaration of function 'copy_from_user'
2016-05-26 am335x 10.1"电容touch 不能识别
点击右上角即可分享
微信分享提示