一、ODBC环境配置
系统环境:
Win7 64位系统
1、安装:mysql驱动程序_mysql-connector-odbc-5.1.6-win32
2、64位系统, 那就在这个目录下C:\Windows\SysWOW64找到odbcad32.exe运行,配置mysql数据源(如果你是32位的,在C:\Windows\System32路径下)
二、ODBC协议脚本编写
1、可以进行录制:
步骤:安装SqlDbx,启动LR的VUGen,选择ODBC协议,进行录制。
缺点:录制脚本复杂且难以理解,而且回放效果不好。
2、手写代码:
步骤:1连接数据库 2执行sql语句 3关闭连接,具体代码如下:
#include "lrd.h"
Action()
{
static LRD_INIT_INFO InitInfo = {LRD_INIT_INFO_EYECAT};
static LRD_DEFAULT_DB_VERSION DBTypeVersion[] =
{
{LRD_DBTYPE_ODBC, LRD_DBVERSION_ODBC_30},
{LRD_DBTYPE_NONE, LRD_DBVERSION_NONE}
};
static LRD_CONTEXT FAR * Ctx1;
static LRD_CONNECTION FAR * Con1;
static LRD_CURSOR FAR * Csr1;
//上面的定义的代码如果录制脚本,在vdf.h中就有定义,同时还有一些其他文件
//如果手写脚本,则需要手工添加,主要是定义各种变量
<pre name="code" class="objc">
//查询行数
unsigned long count=0;
//初始
lrd_init(&InitInfo, DBTypeVersion);
//打开上下文
lrd_open_context(&Ctx1, LRD_DBTYPE_ODBC, 0, 0, 0);
//申请连接的内存
lrd_alloc_connection(&Con1, LRD_DBTYPE_ODBC, Ctx1, 0 /*Unused*/, 0);
//打开连接,注意DRIVER就是上面安装的
lrd_open_connection(&Con1, LRD_DBTYPE_ODBC, "root", lr_decrypt("559b4a806ccaaba6117ac18b9fcdc6ff3f9c67f70903"), "new_mysql", lr_decrypt(
"559b4a80e"), Ctx1, 0, 0);
<pre name="code" class="objc"><pre name="code" class="objc"> //执行第一条sql语句
lrd_open_cursor(&Csr1, Con1, 0);
lrd_stmt(Csr1, "SELECT StartTime FROM Answer_Logs WHERE StartTime='1385439793'", -1, 1, 0 /*None*/, 0);
lrd_row_count(Csr1, &count, 0);
lr_message("count= %d",count);
lrd_close_cursor(&Csr1, 0);
<pre name="code" class="objc"><pre name="code" class="objc"> //执行第二条sql语句
lrd_open_cursor(&Csr1, Con1, 0);
lrd_stmt(Csr1, "SELECT Ip FROM Answer_Logs WHERE Ip='49.5.3.173'", -1, 1, 0 /*None*/, 0);
lrd_row_count(Csr1, &count, 0);
lr_message("count= %d",count);
lrd_close_cursor(&Csr1, 0);
<pre name="code" class="objc"> //执行第三条sql语句
lrd_open_cursor(&Csr1, Con1, 0);
lrd_stmt(Csr1, "SELECT IssueID FROM Answer_Logs WHERE IssueID='2'", -1, 1, 0 /*None*/, 0);
lrd_row_count(Csr1, &count, 0);
lr_message("count= %d",count);
lrd_close_cursor(&Csr1, 0);
//再关闭连接
lrd_close_connection(&Con1, 0, 0);
//释放连接,和alloc相呼应,否则有内存泄露
lrd_free_connection(&Con1, 0 /*Unused*/, 0);
//再关闭上下文
lrd_close_context(&Ctx1, 0, 0);
//完毕,返回0
return 0;
}