linux下c语言通过Freetds读取mssql中数据的代码并且保证无中文乱码
时间: 2024-03-03 14:46:53 浏览: 25
要在Linux下使用C语言通过FreeTDS读取MSSQL中的数据,需要使用FreeTDS库,并且在连接数据库时设置字符集为UTF-8。以下是一个示例代码,可以读取MSSQL数据库中的数据,并保证无中文乱码。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sybfront.h>
#include <sybdb.h>
#define SQL_RESULT_LEN 1024
int main() {
LOGINREC *login;
DBPROCESS *dbproc;
DBBOOL success;
RETCODE retcode;
char *server = "your_server_name";
char *user = "your_username";
char *pass = "your_password";
char *database = "your_database_name";
char sql[SQL_RESULT_LEN];
char name[SQL_RESULT_LEN];
char age[SQL_RESULT_LEN];
char address[SQL_RESULT_LEN];
char phone[SQL_RESULT_LEN];
if (dbinit() == FAIL) {
printf("Error initializing FreeTDS.\n");
return 1;
}
login = dblogin();
DBSETLUSER(login, user);
DBSETLPWD(login, pass);
DBSETLAPP(login, "myapp");
DBSETLVERSION(login, "70");
DBSETLCHARSET(login, "UTF-8");
dbproc = dbopen(login, server);
if (dbproc == NULL) {
printf("Error connecting to the database.\n");
return 1;
}
success = dbuse(dbproc, database);
if (success == FAIL) {
printf("Error selecting database.\n");
return 1;
}
// 注意:这里的 SQL 语句需要根据实际情况进行修改
sprintf(sql, "SELECT name, age, address, phone FROM your_table_name");
retcode = dbcmd(dbproc, sql);
if (retcode != SUCCEED) {
printf("Error executing SQL statement.\n");
return 1;
}
retcode = dbsqlexec(dbproc);
if (retcode != SUCCEED) {
printf("Error executing SQL statement.\n");
return 1;
}
while (dbresults(dbproc) != NO_MORE_RESULTS) {
while (dbnextrow(dbproc) != NO_MORE_ROWS) {
dbbind(dbproc, 1, NTBSTRINGBIND, 0, name);
dbbind(dbproc, 2, NTBSTRINGBIND, 0, age);
dbbind(dbproc, 3, NTBSTRINGBIND, 0, address);
dbbind(dbproc, 4, NTBSTRINGBIND, 0, phone);
dbnullbind(dbproc, 1, &name[0]);
dbnullbind(dbproc, 2, &age[0]);
dbnullbind(dbproc, 3, &address[0]);
dbnullbind(dbproc, 4, &phone[0]);
dbdata(dbproc, 1, (BYTE *)name, strlen(name));
dbdata(dbproc, 2, (BYTE *)age, strlen(age));
dbdata(dbproc, 3, (BYTE *)address, strlen(address));
dbdata(dbproc, 4, (BYTE *)phone, strlen(phone));
printf("%s\t%s\t%s\t%s\n", name, age, address, phone);
}
}
dbexit();
return 0;
}
```
需要注意的是,在连接数据库时需要设置字符集为UTF-8,具体方法是使用`DBSETLCHARSET`函数,例如:
```c
DBSETLCHARSET(login, "UTF-8");
```