odbc sqlsetenvattr(C语言用odbc连接数据库的问题)

:暂无数据 2026-07-06 05:30:02 1

odbc sqlsetenvattr(C语言用odbc连接数据库的问题)

其实odbc sqlsetenvattr的问题并不复杂,但是又很多的朋友都不太了解C语言用odbc连接数据库的问题,因此呢,今天小编就来为大家分享odbc sqlsetenvattr的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

C语言用odbc连接数据库的问题

#include 《mysql/mysql.h》
#include 《stdio.h》

void main(){
MYSQL *mysql;
MYSQL_RES *res;
MYSQL_ROW row;
char *query;
int t,r;

mysql_init(mysql);
if (!mysql_real_connect(mysql,"localhost","mysql",
"mysql","deneme",0,NULL,0))
{
printf( "Error connecting to database: %s\n",mysql_error(mysql));
}
else printf("Connected...\n");

query="select * from Deneme";

t=mysql_real_query(mysql,query,(unsigned int) strlen(query));
if (t)
{
printf("Error making query: %s\n",
mysql_error(mysql));
}
else printf("Query made...\n");
res=mysql_use_result(mysql);
for(r=0;r《=mysql_field_count(mysql);r++){
row=mysql_fetch_row(res);
if(row《0) break;
for(t=0;t《mysql_num_fields(res);t++){
printf("%s ",row);
}
printf("\n");
}
mysql_close(mysql);
}
简介
C APIs包含在mysqlclient库文件当中与MySQL的源代码一块发行,用于连接到数据库和执行数据库查询。有一些例子在MySQL原代码的clients目录里。
MySQL C 变量类型
以下变量类型在MySQL的库当中定义。我们需要这些变量是为了使用MySQL的函数。这些变量有详细的解释,但是这些解释对于写代码来说并不重要。
MYSQL
以下代码块是用来连接数据库的通讯过程

typedef struct st_mysql {
NET net; /* Communication parameters */
gptr connector_fd; /* ConnectorFd for SSL */
char *host,*user,*passwd,*unix_socket,
*server_version,*host_info,*info,*db;
unsigned int port,client_flag,server_capabilities;
unsigned int protocol_version;
unsigned int field_count;
unsigned int server_status;
unsigned long thread_id; /* Id for connection in server */
my_ulonglong affected_rows;
my_ulonglong insert_id; /* id if insert on table with NEXTNR */
my_ulonglong extra_info; /* Used by mysqlshow */
unsigned long packet_length;
enum mysql_status status;
MYSQL_FIELD *fields;
MEM_ROOT field_alloc;
my_bool free_me; /* If free in mysql_close */
my_bool reconnect; /* set to 1 if automatic reconnect */
struct st_mysql_options options;
char scramble_buff;
struct charset_info_st *charset;
unsigned int server_language;
} MYSQL;
MYSQL_RES
这段代码返回查询结果的行。返回的数据称为“数据集”

typedef struct st_mysql_res {
my_ulonglong row_count;
unsigned int field_count, current_field;
MYSQL_FIELD *fields;
MYSQL_DATA *data;
MYSQL_ROWS *data_cursor;
MEM_ROOT field_alloc;
MYSQL_ROW row; /* If unbuffered read */
MYSQL_ROW current_row; /* buffer to current row */
unsigned long *lengths; /* column lengths of current row */
MYSQL *handle; /* for unbuffered reads */
my_bool eof; /* Used my mysql_fetch_row */
} MYSQL_RES;
MYSQL_ROW
这个结构是数据行的一个安全表示法。你无法使用以空字符结束的串,因为数据在这个串可以是二进制, 也许没有包括任何字符。

typedef struct st_mysql_field {
char *name; /* Name of column */
char *table; /* Table of column if column was a field */
char *def; /* Default value (set by mysql_list_fields) */
enum enum_field_types type; /* Type of field. Se mysql_com.h for types */
unsigned int length; /* Width of column */
unsigned int max_length; /* Max width of selected set */
unsigned int flags; /* Div flags */
unsigned int decimals; /* Number of decimals in field */
} MYSQL_FIELD;
my_ulonglong
该类型用于行数,mysql_affected_rows() 、mysql_num_rows()和mysql_insert_id() 。该类型提供范围0 到1.84.e19 的支持。在一些系统, 试图打印出my_ulonglong类型的值是不行的.要显示这样的值, 使用%lu printf 格式,把它转换成unsigned long类型就行了。例如:
printf(Number of rows: %lu\n", (unsigned long) mysql_num_rows(result));

typedef unsigned long my_ulonglong;

连接MySQL,查询数据
现在假设MySQL已安装, 用户和数据表在数据库被创造。以防有什么不明问题的情况, 请参考www.mysql.com 网站。
前面已经说过,MySQL的库文件在mysqlclient。因此在编译MySQL程序的时候有必要加上-lmysqlclient编译选项。MySQL的头文件在/usr/include/mysql目录下(根据Linux的发行版本的不同,这个目录也有所不同),因此你的程序头部看起来有点这个样子:

#include 《mysql/mysql.h》
MySQL的变量类型和函数都包含在这个头文件当中

然后,我们需要创建连接数据库的变量,可以简单地这么做:

MYSQL *mysql;
在连接数据库之前,我们要调用以下函数初始化这个变量:

mysql_init(MYSQL *mysql)
然后

MYSQL * STDCALL mysql_real_connect(MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned int clientflag);

该函数被调用连接到数据库。host是MySQL服务器的主机名,user是登录的用户名,passwd是登录密码,db是要连接的数据库,port是MySQL服务器的TCP/IP端口,unix_socket是连接类型,clientflag是MySQL运行成ODBC数据库的标记。在这篇文章当中该标记设成0,连接寻建立后,这个函数返回0。

现在可以连接数据库,进行查询了:

char *query;

使用这个字符串我们可以创立任何SQL查询语句进行查询。执行这个查询的函数是:

int STDCALL mysql_real_query(MYSQL *mysql,
const char *q,
unsigned int length);

mysql是我们前面用过的变量,q是SQL查询语句,length是这个查询语句的长度。如果查询成功,函数返回0。
查询之后,我们要到一个MYSQL_RES变量来使用查询的结果。以下这行创立这个变量:

MYSQL_RES *res;

然后
mysql_use_result(MYSQL *query)

该函数读出查询结果。
尽管可以很容易地查询了,要用这个查询的结果还要用到其它的函数。第一个是:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

该函数把结果转换成“数组”。你可能注意到了,该函数返回的是MYSQL_ROW变量类型。以下语句创立那样的变量:
MYSQL_ROW row;

如前所解释的,变量row是一个字符串数组。也就是说,row是数组的第二个值...当我们用mysql_fetch_row的时候,接着变量row会取得结果的下一组的数据。当到了结果的尾部,该函数返回一负值。最后我们要关闭这个连接:
mysql_close(MYSQL *mysql)
一些有用的函数
看看如何取得一个表格的字段,以下这个函数可能实现这个功能:
unsigned int STDCALL mysql_num_fields(MYSQL *mysql);

这个函数返回表格里有多少个字段。
取得“数据集”的数目,用:

my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);
my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql);
这个函数是用来得到受INSERT, DELETE, UPDATE查询语句影响的“数据集”数目。注意该函数返回的数据类型是my_ulonglong

请问控制面板里的:数据源 (ODBC) 是如何应用的,

分类: 电脑/网络 》》 电脑常识
问题描述:

原来都没在意这个,现在我得用上这个了可是又不懂;

(我用的数据库是SQL),

可SQL我也不怎么懂!

解析:

Microsoft ODBC 3.0 引入了连接池概念。
连接池使 ODBC 应用程序能够重用现有

来自池, 这样不 ODBC 应用程序无需重新定位连接

通过为任何后续连接完成连接进程。

当 ODBC 应用程序断开连接, 保存该连接

到池中代替实际断开。 保持此连接时间

池中取决于 ODBC 驱动程序的 CPTimeout 属性。 当

超时到期, 该连接被关闭并从池中删除。 ODBC

应用程序可用来更改此值 CPTimeout, 和 SQLConfigDriver

值适用于使用指定 ODBC 驱动程序的所有 ODBC 应用程序。

对于 CPTimeout 默认值为 60 秒。 连接池是很有用当 ODBC 应用程序如 Microsoft Inter

服务器信息 (例如) 连接和断开频繁。 Microsoft

Inter Information Server (IIS) 3.0 Active Server Pages (ASP)

利用了连接池。 您可启用连接池对

IIS 用户通过更改是 StartConnectionPool 值为 1。 StartConnectionPool 位于下:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\ASP\Parameters

ODBC 应用程序可以使用 SQLSetEnvAttr 来启用连接池。 下面是如何启用连接池 ODBC 应用程序中的示例: #include 《windows.h》

#include 《stdio.h》

#include 《sql.h》

#include 《sqlext.h》

void main()

{

SQLHENV henv;

SQLHDBC hdbc;

int i=0;

if (!SQL_SUCCEEDED(SQLSetEnvAttr(

NULL, make process level cursor pooling

SQL_ATTR_CONNECTION_POOLING,

(SQLPOINTER)SQL_CP_ONE_PER_DRIVER,

SQL_IS_INTEGER)))

printf("SQLSetEnvAttr/SQL_ATTR_CONNECTION_POOLING error\n");

if (!SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv)))

printf("SQLAllocHandle error\n");

set the ODBC behavior version.

if (!SQL_SUCCEEDED(SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,

(SQLPOINTER) SQL_OV_ODBC2, SQL_IS_INTEGER)))

printf("SQLSetEnvAttr/SQL_ATTR_ODBC_VERSION error\n");

set the matching condition for using an existing connection in the

pool

if (!SQL_SUCCEEDED(SQLSetEnvAttr(henv, SQL_ATTR_CP_MATCH,

(SQLPOINTER) SQL_CP_RELAXED_MATCH, SQL_IS_INTEGER)))

printf("SQLSetEnvAttr/SQL_ATTR_CP_MATCH error\n");

while (i 《 10) {

if (!SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_DBC,

henv, &hdbc)))

printf("SQLAllocHandle error\n");

if (!SQL_SUCCEEDED(SQLConnect(hdbc,

(unsigned char*)"testing\0", SQL_NTS,

(unsigned char*)"sa\0", SQL_NTS,

(unsigned char*)"\0", SQL_NTS)))

printf("SQLConnect error\n");

else

printf("Connect successfully %d times\n", i);

the first time, the application calls SQLDisconenct, it will return

the connection to the pool

SQLDisconnect(hdbc);

if (!SQL_SUCCEEDED(SQLFreeHandle(SQL_HANDLE_DBC, hdbc)))

printf("SQLFreeHandle error\n");

i++;

}

SQLFreeHandle(SQL_HANDLE_ENV, henv);

}

当 ODBC 应用程序调用 SQLDisconnect 初次, 该连接保存到池。 任何后续 SQLConnect / SQLDisconnect 匹配必需条件将重用第一个连接。

关于odbc sqlsetenvattr和C语言用odbc连接数据库的问题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

odbc sqlsetenvattr(C语言用odbc连接数据库的问题)

本文编辑:admin

更多文章:


数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)

数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)

今天给各位分享数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例的知识,其中也会对数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月7日 17:00

编程语言出现的先后顺序(最早的编程语言是哪一个)

编程语言出现的先后顺序(最早的编程语言是哪一个)

今天给各位分享最早的编程语言是哪一个的知识,其中也会对最早的编程语言是哪一个进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月7日 16:10

小程序源码有什么用(大商创小程序源码好用吗)

小程序源码有什么用(大商创小程序源码好用吗)

“小程序源码有什么用”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看小程序源码有什么用(大商创小程序源码好用吗)!

2026年9月7日 15:40

springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)

springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)

大家好,关于springmvc的依赖很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于springMVC的注入方式有哪几种,这与springMVC依赖的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还

2026年9月7日 14:00

it培训评价网(it培训排名机构十大IT培训机构)

it培训评价网(it培训排名机构十大IT培训机构)

这篇文章给大家聊聊关于it培训评价网,以及it培训排名机构十大IT培训机构对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年9月7日 13:00

个人博客页面布局(新手站长怎样做好独立博客初期运营工作)

个人博客页面布局(新手站长怎样做好独立博客初期运营工作)

大家好,如果您还对个人博客页面布局不太了解,没有关系,今天就由本站为大家分享个人博客页面布局的知识,包括新手站长怎样做好独立博客初期运营工作的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年9月7日 12:40

display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)

display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)

大家好,关于display flex 自动换行很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于overflow-y:hidden;overflow-x:auto;无效解决方法的知识点,相信应该可以解决大家的一些困惑和问题,如

2026年9月7日 11:00

小程序免认证源码(小程序源码都能干嘛)

小程序免认证源码(小程序源码都能干嘛)

本篇文章给大家谈谈小程序免认证源码,以及小程序源码都能干嘛对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月7日 10:50

timestamp without time zone(Postgresql中to_date()函数使用问题)

timestamp without time zone(Postgresql中to_date()函数使用问题)

各位老铁们好,相信很多人对timestamp without time zone都不是特别的了解,因此呢,今天就来为大家分享下关于timestamp without time zone以及Postgresql中to_date()函数使用问题

2026年9月7日 09:40

网页制作代码特效大全(谁知道网页打字机特效的代码)

网页制作代码特效大全(谁知道网页打字机特效的代码)

大家好,如果您还对网页制作代码特效大全不太了解,没有关系,今天就由本站为大家分享网页制作代码特效大全的知识,包括谁知道网页打字机特效的代码的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年9月7日 04:20

最近更新

创业加盟网1688(怎样考察加盟店)
2026-09-07 17:50:14 浏览:0
热门文章

yoga pro 14s carbon(yoga14s接口类型)
2026-07-03 17:50:01 浏览:5
domino directory(帮我翻译一下Recipient’s Domino Directory entry does not specify a valid Notes mail file)
2026-08-03 19:20:01 浏览:4
标签列表