freetds版本:freetds-dev.1.00.514
ubuntu版本:16.04
一、步骤
只说一点,在下面步骤之前要先配置一下字符集,要不然连接数据库后的中文全是乱码。
修改freetds.conf,添加客户端字符编码,改为UTF-8(根据需要也可以是GBK)
保存后退出,其他过程比较简单,网上资料多,不详细介绍了
1../configure CC=arm--linux-gcc --prefix=/home/test/freetds-arm --with-tdsver=auto --enable-msdblib --disable-libiconv --host=arm-linux --enable-shared --enable-static
2.make
3.make install
将freetds-arm路径里的etc/tsql文件复制到arm平台上,就可以直接使用了
二、使用
1.tsql -C 查看信息
这里要把etc下面的三个conf文件及路径也一并放到arm平台上,要不然还是不行滴。。。
2.tsql -H 192.168.0.112 -p 1433 -U sa -P sa123 连接数据库
这里就可以看到使用的字符集改为UTF-8了,如果是"ISO-8859-1",这是freetds的默认字符集,写数据库时会乱码。
在1>后面输sql语句就行了,使用go来执行命令。
三、C程序设计
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sybfront.h>
#include <sybdb.h>
int32_t main()
{
DBPROCESS *dbprocess;
//建立到MSSQL数据库的连接------------------------
dbinit(); //使用dbinit()函数, 进行freetds操作之前的初始化操作
LOGINREC *loginrec = dblogin(); //建立一个到数据库的连接的句柄
DBSETLUSER(loginrec, "sa"); //向句柄中添加连接数据库的用户
DBSETLPWD(loginrec, "123"); //向数据库连接句柄中添加密码
DBSETLCHARSET(loginrec, "UTF-8");
dbprocess = dbopen(loginrec, "127.0.0.1"); //连接数据库,并返回数据库连接结果的句柄
if(dbprocess == FAIL) { //如果连接失败
printf("Connect Fail\n"); //在标准错误中输出信息
return RET_SQL_OPENERR; //进程异常退出
return 1;
} else {
printf("Connect sql success\n");
}
if(dbuse(dbprocess, "DBTest") == FAIL) //使用某个数据库,如果使用失败
{
printf("open database error\n");
return 1; //进程异常退出
} else {
printf("open database success!\n");
}
dbcmd(dbprocess, ""); //要执行的语句
//判断执行是否正确
if(dbsqlexec(dbprocess) == FAIL){
printf("dbcmd error!\n");
return 1;
} else {
printf("dbcmd success!\n");
}
//取数据
if((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS && result_code == SUCCEED)
{
int8_t data_1[100] = {0};
int8_t data_2[100] = {0};
//开始绑定数据
dbbind(dbprocess, 1, CHARBIND, (int8_t)0, (BYTE*)data_1);
dbbind(dbprocess, 2, CHARBIND, (int8_t)0, (BYTE*)data_2);
//遍历结果集合
while(dbnextrow(dbprocess) != NO_MORE_ROWS)
{
i_line++; //行数
printf("line[%d]:name is %s, Id is %s\n", i_line, data_1, data_2);
strncat(c_result_data[0], data_1, strlen(data_1));
strncat(c_result_data[0], "|", 1);
strncat(c_result_data[1], data_2, strlen(data_2));
strncat(c_result_data[1], "|", 1);
memset(data_1, 0, 100);
memset(data_2, 0, 100);
}
printf("count = %d\n", dbcount(dbprocess));
printf("row = %d\n", dbcurrow(dbprocess));
}
dbclose(dbprocess);
printf("exit success\n");
}