Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)

http://blog.csdn.net/helonsy/article/details/7207497

Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)

(1)安装freeTDS

FreeTDS为Linux系统提供了TDS协议的开源客户端。由于MS SQL和Sybase使用的恰是TDS协议,所以在Linux中可以用FreeTDS连接MS SQL。

官网:http://www.freetds.org

下载:wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz

安装:
[root@vm01 ~]# tar -zxvf freetds-stable.tgz
[root@vm01 ~]# cd freetds-0.91
[root@vm01 freetds-0.91]# ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib
[root@vm01 freetds-0.91]# make
[root@vm01 freetds-0.91]# make install

修改环境变量:
FREETDS_HOME=/usr/local/freetds
export PATH=$FREETDS_HOME/bin:$PATH

库文件加载:
[root@vm01 freetds-0.91]# vim /etc/ld.so.conf.d/freetds.conf
/usr/local/freetds/lib
[root@vm01 freetds-0.91]# ldconfig

(2) 修改配置文件,连接数据库
(i) 添加数据源
[root@vm01 test]# vim /usr/local/freetds/etc/freetds.conf 
#zkl add
[SQL2005]
        host = 192.168.232.133
        port = 1433
        tds version=8.0
#client charset = ISO-8859-1
完成后,使用如下命令即可连接到 SQL Server 2005 .
[root@vm01 test]# tsql -S SQL2005 -U sa -P zkl
locale is "zh_CN.GB18030"
locale charset is "GB18030"
using default charset "GB18030"
1> use test  [使用test数据库]
2> go
1> select * from StuInfo [查询表信息]
2> go
StuID Name
 Age
001 zyh
 24
002 zkl
 21
003 Jim
 24
(3 rows affected)

(ii) 修改协议版本以正常连接SQL Server 2005
修改 freetds 配置文件
[root@vm01 test]# vim /usr/local/freetds/etc/freetds.conf 
[global]
        # TDS protocol version
#;      tds version = 4.2

         tds version=8.0   (这个前面不能有逗号)

连接 SQL SERVER 2005 需要使用的协议版本为 8.0,而使用 4.2 时,连接将会失败。使用 tsql 命令连接时,如果不像步骤(2)中那样配置数据源,则同样需要修改协议,然后才能使用如下命令正常连接数据库:
[root@vm01 test]# tsql -H 192.168.232.133 -p 1433 -U sa -P zkl

注意:第一个p为小写,后面的P是大写。

(3) 使用C++代码连接数据库
首先,确保协议版本是 8.0,然后编译以下C代码,测试与数据库的连接。

test.c:

     #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[] = "sa";
char szPassword[] = "zkl";
char szDBName[] = "test"; //数据库名
char szServer[] = "192.168.232.133: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 -;
}
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 -;
} DBINT result_code;
char szStuID[]={};
char szName[]={};
char szAge[]={};
int rows = ;
while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS){
if (result_code == SUCCEED){
dbbind(dbprocess, , CHARBIND, (DBINT), (BYTE*)szStuID);
dbbind(dbprocess, , CHARBIND, (DBCHAR), (BYTE*)szName);
dbbind(dbprocess, , CHARBIND, (DBCHAR), (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 -;
}
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 -;
}
printf("delete from table 'StuInfo' success.\n"); //关闭数据库连接
dbclose(dbprocess); return ;
}
     #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[] = "sa";
char szPassword[] = "zkl";
char szDBName[] = "test"; //数据库名
char szServer[] = "192.168.232.133: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 -;
}
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 -;
} DBINT result_code;
char szStuID[]={};
char szName[]={};
char szAge[]={};
int rows = ;
while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS){
if (result_code == SUCCEED){
dbbind(dbprocess, , CHARBIND, (DBINT), (BYTE*)szStuID);
dbbind(dbprocess, , CHARBIND, (DBCHAR), (BYTE*)szName);
dbbind(dbprocess, , CHARBIND, (DBCHAR), (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 -;
}
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 -;
}
printf("delete from table 'StuInfo' success.\n"); //关闭数据库连接
dbclose(dbprocess); return ;
}

Makefile:
-----------------------------------------------
default:
gcc test.c -o test -L/usr/local/freetds/lib -lsybdb -I/usr/local/freetds/include

Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)的更多相关文章

  1. 下载-MS SQL Server 2005(大全版)含开发人员版、企业版、标准版【转】

    中文名称:微软SQL Server 2005 英文名称:MS SQL Server 2005资源类型:ISO版本:开发人员版.企业版.标准版发行时间:2006年制作发行:微软公司地区:大陆语言:普通话 ...

  2. 烂泥:SQL Server 2005数据库备份与恢复

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 服务器的迁移,因为业务使用的数据库是SQL Server 2005,所以就要首先对数据库进行备份. 备份可以分为手动备份和自动备份,我们先来介绍手动备份 ...

  3. 如何创建和还原SQL Server 2005数据库?

    在还原SQL Server 2005数据库文件之前,建议先把要还原的数据库文件复制粘贴到某个盘的根目录下,这样便于一会儿找到相关的文件,比如C盘. 先打开SQL Server 2005的Microso ...

  4. SQL Server 2005数据库定期备份(非常详细)与 SQL Server 2005数据库备份定期清理

     SQL Server 2005数据库定期备份 分类: SQL Server 20052011-01-06 16:25 3320人阅读 评论(1) 收藏 举报 sql server数据库sqlserv ...

  5. Linux下用freetds执行SQL Server的sql语句和存储过程

    Linux下用freetds执行SQL Server的sql语句和存储过程 http://www.linuxidc.com/Linux/2012-06/61617.htm freetds相关 http ...

  6. SQL server 2005数据库的还原与备份

    一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2005→SQL Server Management Studio ,这里我以UMVTEST命 ...

  7. [SQL SERVER 2005]数据库差异备份及还原

    因为之前遇到还原差异备份,最开始遇到SQLServer报错:”无法还原日志备份或差异备份,因为没有文件可用于前滚“.查阅很多资料后,终于得到解决.收集整理成这篇随笔. 问题原因:出现这种错误绝大多数是 ...

  8. 烂泥:SQL Server 2005数据库安装

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 为了能更好的利用服务器,所以打算把该业务进行迁移.因为该业务比较特殊,需要服务器上有相应的硬件支持,所以打算直接升级该服务器目前的操作系统.目前公司服务 ...

  9. 修改SQL Server 2005 数据库文件名字

    对于SQLServer 2005的数据库文件名字的修改.不多说,见图: 对于数据库名的更改直接选中要修改的数据库,F2,你懂的,不懂的可以去屎了.....0.0 下面要修改数据库的文件名 原理就是利用 ...

随机推荐

  1. JSP内置对象及常用方法

    jsp九大内置对象及四个作用域: 何为作用域 先让我们看看效果: 大概流程是这样的,我们访问index.jsp的时候,分别对pageContext, request, session,applicat ...

  2. HTML实践发现(标签<pre>)

    1. (1).第一种编辑: (2).浏览器中显示: 2. (1).第二种编辑 (2).浏览器中显示: 结果发现:使用标签<pre>,在浏览器中显示的结果与在<pre>下方编写的 ...

  3. 【JSOI2007】【Bzoj1029】建筑抢修

    贪心... 按照T2来进行排序,用堆来进行维护.循环一遍,如果循环时间加上已用时间不超过截止时间,那就ANS++.否则,将它与堆顶判断,如果小于堆顶就把堆顶踢出,把它加入. #include<c ...

  4. 10年微软MVP路(如何成为一个MVP?)

    搞微软技术的,大家或多或少都有听说过微软的"最有价值专家"(MVP), 从2006年到2015年连续10年ASP.NET/IIS MVP.当年很多一起搞微软技术的朋友都转搞其他非微 ...

  5. .NET 4.0 版本号

    .NET 4.5.1, .NET 4.5 和 .NET 4.0 均基于 .NET 4.0 CLR,而 .NET 4.5 对 CLR进行了升级和Bug修复. .NET 4.0 - 4.0.30319.1 ...

  6. 备忘录:hadoop技术一点积累

    1.hbase的rowkey是按字典排序的,我看有的资料建议rowkey设计不应该是自增的,应该和这个字典排序相关吧 2.hbase的数据存储是按照region来的,region的设计前段时间在坐飞机 ...

  7. 薪资至少10K的一道题,你能拿下吗

    我所了解的华为: 应届本科生8k+ 应届硕士生10k+ 应届博士生12k+ 看到后什么感想?有没有只恨生不逢时运不佳的感觉? 很多人做3年多甚至更久,才能达到这个薪资水平,还不如一个新生. 在我看来, ...

  8. java基础-多线程执行

    package Thanqi; public class TestApple implements Runnable{ //苹果的数量 private int count = 5; //拿苹果 //s ...

  9. python发送邮件及附件

    今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...

  10. Jquery中的(function($){...})(jQuery)

    当你第一眼看到“(function($){...})(jQuery)”的时候,你有什么感觉?呵呵呵,我当时还是止不住的从心底里骂了一句——操,这他妈什么劳什子.时过境迁,对于现在无比倚重Jquery的 ...