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 + -
显示快捷键?