您的位置:首页 > 其它

简单使用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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: