怎么用odbc连接mysql数据库

怎么用odbc连接mysql数据库,第1张

首先安装Mysql数据库

然后安装MySQL

ODBC

驱动

将要连接的MySQL数据库文件夹复制到MySQL安装文件夹的DATE目录下,DATE下的文件名为数据库名:

1、C:\Program

Files\MySQL\MySQL

Server

5.0\data

2、C:\ProgramData\MySQL\MySQL

Server

5.1\data

根据您的系统可能不能,本人WIN7系统为上面第二个目录,安装完成后,我们下一步就创建ODBC数据源,步骤如下:

一、打开控制面板——管理工具——数据源(ODBC)——文件DSN如下图:

点添加,然后选择MySQL

ODBC

5.1

Driver

如下图:

输入数据源地址及名称按下一步然后完成数据源的创建,如下图:

完成创建如下图:

然后系统会d出下图窗口,在Server:中填入本机地址:127.0.0.1,

Port:3306(MySQL默认端口),User:填root(默认用户名为小写root),密码填入安装时输入的密码,database:选择MySQL数据库,完成按OK这样数据源就创建成功!

然后打开Access--外部数据--导入ODBC数据库—选择导入新表或链接--然后选择刚刚创建的数据源,也可以在这里新建数据源,方法和前面一样。

然后输入密码,选择数据库按OK建立链接!

Mysql C API编程步骤

1、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:

#include <WinSock2.h>// 进行网络编程需要winsock2.h

#include <mysql.h>

#pragma comment(lib, “libmysql.lib”)

2、创建MYSQL变量。如:

MYSQL mysql

3、初始化MYSQL变量。

mysql_init(&mysql)

4、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:

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 long clientflag)

参数说明:mysql–前面定义的MYSQL变量;host–MYSQL服务器的地址;user–登录用户名;passwd–登录密码;db–要连接的数据库;port–MYSQL服务器的TCP服务端口;unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制;clientflag–Mysql运行为ODBC数据库的标记,一般取0。连接失败时该函数返回0。

5、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:

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

参数说明:mysql–前面定义的MYSQL变量;q–SQL查询语句;length–查询语句的长度。

查询成功则该函数返回0。

6、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。

两个函数的原型分别为:

MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql)

MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql)

这两个函数分别代表了获取查询结果的两种方式。第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result。

7、调用mysql_fetch_row函数读取结果集数据。

上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result)

参数result就是mysql_store_result或mysql_use_result的返回值。

该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row〔i〕为第i个字段的值。当到结果集尾部时,此函数返回NULL。

8、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:

void STDCALL mysql_free_result(MYSQL_RES *result)

9、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:

void STDCALL mysql_close(MYSQL *sock)

你这不是乱码,而是二进制数据来罢啦,得进行转换.

为什么你要用blob呢?

blob是二进制数据,且你数据读取时,还要必须通过程序在外面写代码进行转换才能正常显示,多麻烦啊

就算你的内容很多,为什么你用blob却不用text?

blob与text的最大存储范围都是2的16次方个字节,一样大呢。

你什么内容那么大?我觉得varchar类型就足够了吧?varchar最大存储范围是65535个字节,这还不够?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10800626.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存