简单使用ODBC测试数据源
2012-02-25 18:43
232 查看
#include<stdlib.h> #include<windows.h> #include<sql.h> #include<sqlext.h> #include<sqltypes.h> #include <time.h> int nRtuNo = 0; uint16 m_nSampleHZ = 100; uint8 m_nCount = 0; typedef struct tagSENSOR { uint16 ID; } SENSOR, *LPSENSOR, *PSENSOR; CAEList lstSensor; extern void SetValue(HSTMT hStmt); int TRpw() { UCHAR szDSN[SQL_MAX_DSN_LENGTH] = "RTSOS"; // Data Source Name buffer UCHAR szUID[] = "sa"; UCHAR *szPasswd = (unsigned char*)"liuxuezong"; // 第一步:定义句柄 HENV hEnv = NULL; HDBC hDBC = NULL; HSTMT hStmt = NULL; SQLRETURN ret; // 第二步:初始化环境 ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv); ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0); if (ret == SQL_SUCCESS) { printf("环境分配成功!\n"); } // 第三步:建立连接 ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDBC); ret = SQLConnect(hDBC, szDSN, SQL_NTS, szUID, SQL_NTS, szPasswd, SQL_NTS); if (!SQL_SUCCEEDED(ret)) { printf("数据库连接失败!\n"); return -1; } // 第四步:初始化语句句柄 ret = SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStmt); // 第五步:处理结果集 SetValue(hStmt); // 第六步:中止处理 SQLFreeHandle(SQL_HANDLE_STMT, hStmt); SQLDisconnect(hDBC); SQLFreeHandle(SQL_HANDLE_DBC, hDBC); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); return 0; }
void SetValue(HSTMT hStmt) { int millsecond; SQLRETURN ret; float32 fValue; char cmdbuf[2048]; UCHAR *szSqlStr; CDataWrapper *pDataWrapper = CDataWrapper::Instance(); // flag + time + {data} if (pDataWrapper == NULL) { return; } char Value[24]; char szAryValue[1024]; memset(szAryValue, 0, sizeof(szAryValue)); for (int k = 0; k < m_nSampleHZ; k++) { memset(Value, 0, sizeof(Value)); sprintf(Value, "VAL%d,", k); if (k == m_nSampleHZ - 1) { sprintf(Value, "VAL%d", k); } else { sprintf(Value, "VAL%d,", k); } strcat(szAryValue, Value); } for (int i = 0; i < lstSensor.GetSize(); i++) { memset(cmdbuf, 0, sizeof(cmdbuf)); SENSOR *pData = (SENSOR *)lstSensor.GetAt(i); uint8 offset = (m_nSampleHZ + 3) * i; time_t sample_time_second = time(0); fValue = 0.0f; pDataWrapper->GetAIValue(nRtuNo, 0 + offset, fValue); if (fValue > 0) // 第一组有变化数据 { float32 fTV1 = 0, fTV2 = 0; pDataWrapper->GetAIValue(nRtuNo, 1 + offset, fTV1); pDataWrapper->GetAIValue(nRtuNo, 2 + offset, fTV2); sample_time_second = (time_t)fTV2 * 65536 + fTV1; sprintf(cmdbuf, "insert into TRPW_SAMPLE100HZ(Sense_ID,\ SAMPLE_TIME,RECORDNO,%s) Values (%d,%d,%d,", szAryValue, \ pData->ID, sample_time_second, i); for (int j = 0; j < m_nSampleHZ; j++) { fValue = 0.0f; pDataWrapper->GetAIValue(nRtuNo, (3 + i) + offset, fValue); memset(Value, 0, sizeof(Value)); if (j == m_nSampleHZ - 1) { sprintf(Value, "%.3f)", fValue); } else { sprintf(Value, "%.3f,", fValue); } strcat(cmdbuf, Value); } szSqlStr = (SQLCHAR *)cmdbuf; ret = SQLExecDirect(hStmt, szSqlStr, SQL_NTS); } } }
相关文章推荐
- 简单的获取网络数据 测试使用
- 简单使用ADO测试数据源
- 使用Enumerable模块实现简单的测试框架并进行数据统计
- 记录一次简单的STM32串口通信使用printf发送数据到屏幕,并测试SHA512算法。
- 使用JMeter进行一次简单的带json数据的post请求测试,json可配置参数
- 使用Hbase快照将数据输出到互联网区测试环境的临时Hbase集群
- 如何使用Visual Studio 2010在数据库中生成随机测试数据
- caffe安装,编译(包括CUDA和cuDNN的安装),并训练,测试自己的数据(caffe使用教程)
- 使用postgreSQL DataSync 进行pg数据库升级 数据同步 升级脚本生成, postgreSQL DataSync简单教程
- Python:随机生成测试数据的模块--faker的基本使用
- dedecms 5.6 初始化数据体验包本地测试安装使用方法
- 数据 4000 库的简单理解学习和使用
- Retrofit2,简单使用测试
- 使用storyboard实现页面跳转,简单的数据传递
- Bootstrap Data Table简单使用(动态加载数据)
- Robot Framework 使用1-环境配置及简单网站兼容性测试(转)
- 使用LOL盒子的数据查询简单的战斗力信息
- 数学建模_以fisheriris数据为例使用新版本神经网络工具箱feedforwardnet进行简单实现
- Keil MDK 使用malloc()&free(),stm32简单测试可用
- Json介绍及Jsoncpp简单使用(测试代码+测试实例)