ubuntu 交叉编译freetds步骤,及C程序设计

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");
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值