main.cpp
来自「通用的ODBC接口程序,将各种数字转换成字符串形式,读取SqlServer200」· C++ 代码 · 共 126 行
CPP
126 行
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <iostream.h>
#include <sql.h>
#include <sqlext.h>
#include "Core.h"
#include "source.h"
#include "SQlUReader.h"
int main(int argc, char *argv[])
{
C_Source source;
CSQlUReader SqlReader;
C_String sql;
C_String tagname;
C_String tablename;
C_String fieldname;
SQLRETURN error;
C_String stime;
double val;
char strVal[32];
int nYear;
int nMonth;
int nDay;
int nHour;
int nMinute;
int nSecond;
if (!source.connect())
return -1;
vector<C_Source::serverinfo> serverList;
source.paraInfoTree(serverList);
int g_count=serverList[0].groupList.size();
while (true)
{
try
{
if (!SqlReader.OpenDsn(serverList[0].name, serverList[0].user, serverList[0].pwd, error)) // 未连上则3秒后再试
{
source.infoEx("连接数据库失败!");
Sleep(3000);
continue;
}
//循环读取各表各字段最新的数据。
//新一轮数据开始读取..........
for(int i=0;i<g_count;i++)
{
int count = serverList[0].groupList[i].itemList.size();
for(int k=0;k<count;k++)
{
tagname=serverList[0].groupList[i].itemList[k].tag;
int index=tagname.find(".",1,0);
int len=tagname.length();
tablename=tagname.left(index);
fieldname=tagname.right(len-(index+1));
sql="";
sql=sql+"select top 1 SurveyDate,";
sql=sql+fieldname;
sql=sql+" from ";
sql=sql+ tablename;
sql=sql+" order by SurveyDate desc";
if(!SqlReader.OpenTable(serverList[0].name,sql))
{
SqlReader.CloseTable();
CSQlUReader::CloseDsn();
while(!CSQlUReader::OpenDsn(serverList[0].name, serverList[0].user, serverList[0].pwd, error))
{
CSQlUReader::CloseDsn();
Sleep(3000);
continue;
}
}
if(!SqlReader.ExecSql(serverList[0].name,sql))
{
SqlReader.CloseTable();
CSQlUReader::CloseDsn();
while(!CSQlUReader::OpenDsn(serverList[0].name, serverList[0].user, serverList[0].pwd, error))
{
CSQlUReader::CloseDsn();
Sleep(3000);
continue;
}
}
stime=SqlReader.m_coldata[0].value;
nYear=(stime.left(4)).toInt();
nMonth=(stime.mid(5,2)).toInt();
nDay=(stime.mid(8,2)).toInt();
nHour=(stime.mid(11,2)).toInt();
nMinute=(stime.mid(14,2)).toInt();
nSecond=(stime.mid(17,2)).toInt();
val=atof(SqlReader.m_coldata[1].value);
sprintf(strVal, "%.3f",val);
int time=source.convertTime(nYear,nMonth,nDay,nHour,nMinute,nSecond);
if(!source.sendData(serverList[0].groupList[i].itemList[k].tag,strVal,1,time))
{
return -1;
}
SqlReader.CloseTable();
CSQlUReader::CloseDsn();
while(!CSQlUReader::OpenDsn(serverList[0].name, serverList[0].user, serverList[0].pwd, error))
{
CSQlUReader::CloseDsn();
Sleep(1000);
continue;
}
}
}
}
catch (...)
{
source.info("遇到未知错误,数据库重新打开!");
exit(-1);
}
Sleep(5000);
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?