Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)
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测试源码)的更多相关文章
- 下载-MS SQL Server 2005(大全版)含开发人员版、企业版、标准版【转】
中文名称:微软SQL Server 2005 英文名称:MS SQL Server 2005资源类型:ISO版本:开发人员版.企业版.标准版发行时间:2006年制作发行:微软公司地区:大陆语言:普通话 ...
- 烂泥:SQL Server 2005数据库备份与恢复
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 服务器的迁移,因为业务使用的数据库是SQL Server 2005,所以就要首先对数据库进行备份. 备份可以分为手动备份和自动备份,我们先来介绍手动备份 ...
- 如何创建和还原SQL Server 2005数据库?
在还原SQL Server 2005数据库文件之前,建议先把要还原的数据库文件复制粘贴到某个盘的根目录下,这样便于一会儿找到相关的文件,比如C盘. 先打开SQL Server 2005的Microso ...
- SQL Server 2005数据库定期备份(非常详细)与 SQL Server 2005数据库备份定期清理
SQL Server 2005数据库定期备份 分类: SQL Server 20052011-01-06 16:25 3320人阅读 评论(1) 收藏 举报 sql server数据库sqlserv ...
- Linux下用freetds执行SQL Server的sql语句和存储过程
Linux下用freetds执行SQL Server的sql语句和存储过程 http://www.linuxidc.com/Linux/2012-06/61617.htm freetds相关 http ...
- SQL server 2005数据库的还原与备份
一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2005→SQL Server Management Studio ,这里我以UMVTEST命 ...
- [SQL SERVER 2005]数据库差异备份及还原
因为之前遇到还原差异备份,最开始遇到SQLServer报错:”无法还原日志备份或差异备份,因为没有文件可用于前滚“.查阅很多资料后,终于得到解决.收集整理成这篇随笔. 问题原因:出现这种错误绝大多数是 ...
- 烂泥:SQL Server 2005数据库安装
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 为了能更好的利用服务器,所以打算把该业务进行迁移.因为该业务比较特殊,需要服务器上有相应的硬件支持,所以打算直接升级该服务器目前的操作系统.目前公司服务 ...
- 修改SQL Server 2005 数据库文件名字
对于SQLServer 2005的数据库文件名字的修改.不多说,见图: 对于数据库名的更改直接选中要修改的数据库,F2,你懂的,不懂的可以去屎了.....0.0 下面要修改数据库的文件名 原理就是利用 ...
随机推荐
- <web Font的使用>
使用font-face将字体引入web中 先将字体文件复制到项目的font文件夹中,CSS样式如下: @font-face { font-family: 'iconfont'; /*字体名称*/ sr ...
- PHP常用算法
//二维数组的按某字段来排序(从小到大排序) function number_array_sort_asc($array,$key_name){ $arr = array(); foreach ($a ...
- OUTLOOK 发生错误0x8004010D
问题: outlook 2003 在接收邮件时报错: “正在接收”报告了错误(0x8004010D):“在包含您的数据文件的驱动器上,磁盘空间不足.请清空“已删除邮件”文件夹或删除某些文件以释放 ...
- SQL Server2008附加数据库之后显示为只读时解决方法
啰嗦的话就不多说了,直入主题吧! 方案一: 碰到这中情况一般是使用的sa账户登录的,只要改为Windows身份验证,再附加数据库即可搞定. 方案二: 使用sa登录SQL Server2008附加数据库 ...
- Event Store 2.0发布,带来了安全支持和测试版Projections库
Event Store 2.0版本于上周发布,它带来了安全支持允许锁定Event Store和在事件流上设置访问控制列表.其主要新特性包括: HTTP和TCP之上的身份认证,包括账户管理 测试版Pro ...
- 梦想还需有,因它必实现——发现最新版iOS漏洞,OverSky团队专访
梦想还需有,因它必实现——发现最新版iOS漏洞,OverSky团队专访 “成功了!”,随着一句欢呼声在阿里巴巴西溪园区传出,Cydia的图标出现在一部iOS9.3.4的iPhone6上并成功运行 ...
- AutoMapper 最佳实践
AutoMapper 是一个基于命名约定的对象->对象映射工具. 只要2个对象的属性具有相同名字(或者符合它规定的命名约定),AutoMapper就可以替我们自动在2个对象间进行属性值的映射.如 ...
- C语言 · 打印1-200之间的素数
素数定义:除了1和本身再无其他整数可被其本身整除的数称为素数,也称质数. 举一例子打印出1-200之间所有的素数: #include<stdio.h> #include<math.h ...
- 2013 duilib入门简明教程 -- 部分bug 2 (14)
上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃 如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...
- Gyp语法规则参考 & 工具的使用
转自:http://www.cnblogs.com/nanvann/p/3913880.html 翻译自 https://code.google.com/p/gyp/wiki/GypLanguageS ...