linux 下 sqlserver 连接 与开发准备

最近需要再linux下开发一个服务链接SQLserver。但是没有相关经验,然后参考了网上的一些博客。有点心得记录如下。

主要参考了这个:

主要思路:采用unixODBC + FreeTDS 封装库的方案来实现

1. 安装驱动包:

我使用离线安装:

Index of /rhel/7/prod/Packages/u/ (microsoft.com)

在上面中下载了上图中的2个安装包。 

unixODBC-2.3.7-1.rh.x86_64.rpm 

unixODBC-utf16-2.3.1-1.x86_64.rpm

安装

yum localinstall unixODBC-2.3.7-1.rh.x86_64.rpm
yum localinstall unixODBC-utf16-2.3.1-1.x86_64.rpm

去下面的地址下载freeTDS,最新的包。freetds-1.3.18.tar.gz

FreeTDS.org

tar -zxvf freetds-1.3.18.tar.gz

cd freetds-1.3.18

进入目录之后就开始编译了,但是需要注意一些事情。

需要注意的就是这里的--with-tdsver=7.3,这个非常重要,你需要根据你的数据库版本选择正确的配置项,由于现在大多是SQLserve2008 r2 所以需要选择7.3.

 

./configure  --prefix=/usr/local/freetds  --with-tdsver=7.3  --enable-msdblib
 
 主要参数说明:--with-tdsver设置FreeTDS的版本,我这里设置了7.3是为了能连接SQL2008

                    --enable-msdblib是是否允许Microsoft数据库函数库,这里为允许

紧接着;

make && make install

然后我们可以测试一下是否安装成功,切换到目录/usr/local/freetds/bin/tsql -C
如果出现一下命令.说明成功安装了。

 

测试数据库是否联通

# /usr/local/freetds/bin/tsql -H 数据库服务器IP  -p 端口号 -U 用户名 -P 密码

/usr/local/freetds/bin/tsql -H 127.0.0.1 -p 1433 -U sa -P '123'

如果是我上图中的,证明联通成功。

 C代码示例,参考了Linux下连接Sql Server_linux 联接sql server_zhangatm的博客-CSDN博客

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <unistd.h>  
  
#include <sybfront.h> //freetds头文件 
#include <sybdb.h> //freetds 
  
  
int main(void) 
{ 
    char szUsername[32] = "admin"; 
    char szPassword[32] = "root123"; 
    char szDBName[32] = "db1"; //数据库名 
    char szServer[32] = "192.168.11.112:1433";//数据库服务器:端口 
  
    //初始化db-library 
    dbinit(); 
        
    //连接数据库 
    LOGINREC *loginrec = dblogin(); 
    DBSETLUSER(loginrec, szUsername);        
    DBSETLPWD(loginrec, szPassword); 
    DBPROCESS *dbprocess = dbopen(loginrec, szServer);//连接数据库 
    if(dbprocess == FAIL) 
    { 
        printf("Conect to MS SQL SERVER fail, exit!\n"); 
        return -1;  
    } 
    printf("Connect to MS SQL SERVER success!\n"); 
        
    if(dbuse(dbprocess, szDBName) == FAIL) 
        printf("Open database failed!\n"); 
    else 
        printf("Open database success!\n"); 
        
    //查询数据库 
    printf("[查询数据库表]\n"); 
    dbcmd(dbprocess, "select StuID, Name, Age from StuInfo"); 
    if(dbsqlexec(dbprocess) == FAIL) 
    { 
        printf("Query table 'StuInfo' error.\n"); 
        return -1;  
    } 
      
    DBINT result_code; 
    char szStuID[20]={}; 
    char szName[80]={}; 
    char szAge[10]={}; 
    int rows = 0; 
    while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS){ 
        if (result_code == SUCCEED){ 
            dbbind(dbprocess, 1, CHARBIND, (DBINT)0, (BYTE*)szStuID); 
            dbbind(dbprocess, 2, CHARBIND, (DBCHAR)0, (BYTE*)szName); 
            dbbind(dbprocess, 3, CHARBIND, (DBCHAR)0, (BYTE*)szAge); 
            printf("StuID\tName\tAge\n", szStuID); 
            while (dbnextrow(dbprocess) != NO_MORE_ROWS){                         
                printf("%s\t", szStuID); 
                printf("%s\t", szName); 
                printf("%s\n", szAge); 
            } 
        } 
    }        
  
    printf("[插入数据到数据库表]\n"); 
    dbcmd(dbprocess, "insert into StuInfo(StuID, Name, Age) values(888,'James',28)"); 
    if(dbsqlexec(dbprocess) == FAIL) 
    { 
        printf("insert into table 'StuInfo' error.\n"); 
        return -1;  
    } 
    printf("insert into table 'StuInfo' success.\n"); 
     
    printf("[删除数据库表中的记录]\n"); 
    dbcmd(dbprocess, "delete from StuInfo where StuID=888"); 
    if(dbsqlexec(dbprocess) == FAIL) 
    { 
        printf("delete from table 'StuInfo' error.\n"); 
        return -1;  
    } 
    printf("delete from table 'StuInfo' success.\n"); 
     
    //关闭数据库连接 
    dbclose(dbprocess); 
 
    return 0; 
}  

代码写完之后,编译的时候需要链接正确才能通过,整句话是这样的:

gcc -o dbTest dbTest.c -lrt /usr/lib/libsybdb.a 【一定要加入 -lrt 才行】

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值