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 下面要修改数据库的文件名 原理就是利用 ...
随机推荐
- JSP内置对象及常用方法
jsp九大内置对象及四个作用域: 何为作用域 先让我们看看效果: 大概流程是这样的,我们访问index.jsp的时候,分别对pageContext, request, session,applicat ...
- android——数据库版本升/降级问题
数据库版本升级 在开发android应用程序的时候,一般由于在我们开发的时候我们不知道以后会后什么新功能,也有可能增加业务逻辑(也就是更新),可想而知我们原来的数据库结构可能不适用已更新的应用,那么应 ...
- MaxTemperature程序Mapper ClassNotFoundException
错误: 执行hadoop权威指南上MaxTemperature程序出现Mapper类ClassNotFoundException异常: 解决: 将书上的 JobConf job = new JobCo ...
- 【五】将博客从jekyll迁移到了hexo
本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdo ...
- .NET程序反汇编JustDecompile 开源
JustDecompile是Telerik公司推出一个免费的.net反编译工具,支持插件,与Visual Studio 集成,能够创建Visual Studio project文件.JustDecom ...
- 思维导图FreeMind
什么是MindMap? MindMap(被译成思维导图或心智图)是一种思维工具,由英国的记忆之父托尼-博赞发明. MindMap是一种新的思维模式,它将左脑的逻辑.顺序.条例.文字.数字,以及右脑的图 ...
- 全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)
注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有<全新 Mac 安装指南(通用篇)>作 ...
- Jenkins的Windows Slave分布式构建和部署
1.新建的Slave:系统管理-->管理节点-->新建节点 远程工作目录 即是 节点服务器 站点文件存放目录 在配置节点时 启动方法 配置的选项中的 Launch agent via Ja ...
- 精通visual c++指纹模式识别系统算法及实现
通过学习,掌握以下几个问题: 1.核心算法,并且向GVF衍生: 2.核心库封装的方法 2016年11月16日06:52:51 昨日实现了梯度场和频率场的计算.最大的感觉就是建立基础代码库的重要性. 如 ...
- 视图必须派生自 WebViewPage 或 WebViewPage<TModel>
后端汇总:http://www.cnblogs.com/dunitian/p/4523006.html#efmvc 后来发现原来吧web.config给删了 这就简单了,复制其他项目的web.conf ...