LabWindows operation SQL SERVER

First install sqltoolkits.rar, add cvi_db.h cvi_db.fp, all test environment is LabWindows 2013+SQL SERVER 2008 +WINDOWS7/10

1 Global variables and data structures

const int channelCount=21;  //通道数目

int hdbc;                   //数据库连接
int hstat;                  //SQL语句执行
long curRecord=0;           //当前记录
long sumRecord=0;           //记录总数


//数据存储类型,每一个结构存储两个通道数据
struct  AquireDataType
{ 
	char w1NodeName[30];   	//通道名称1  

	float w1WinSpeed;	 	//风速数据1  
   
	float w1EnvTemp;	   	//温度数据1 
	
	
	char w2NodeName[30];   	//通道名称2   
		
	float w2WinSpeed;	 	//风速数据2 

	float w2EnvTemp;	  	//温度数据2 
};

//数据存储数组,每一个结构存储两个通道数据
struct AquireDataType WxpAqurieData[channelCount];

2 database connection

//连接数据库
void connectDataBase()
{
	int nBufSize=MAX_COMPUTERNAME_LENGTH+1;
	TCHAR chBuf[nBufSize];
	ZeroMemory(chBuf,nBufSize);
	DWORD dwRet=nBufSize;
	GetComputerName(chBuf,&dwRet);
	char ConnectStr[1000];
	sprintf(ConnectStr,"Provider=SQLOLEDB;Data Source=%s;Integrated Security=SSPI;Initial Catalog=DQmultiChannelDB",chBuf);
	//LAPTOP-Q8T047LL  SKY-20171206OAS
	hdbc=DBConnect(ConnectStr);
}

3 Complete the data insertion operation (there are a lot of fields here, using code splicing, in fact, you can write directly: insert table(item1,item2) values ​​(val1,val2))

//插入数据进数据库
void inertDataIntoDB()
{
	char temp[100];
	char sql[1000]="insert into DQmultiChannel(";

	char sql2[1000]="";
	char sql3[1000]="";

	//拼接字段
	for(int i=1; i<channelCount; i++)
	{
		sprintf(temp,"S%02d,T%02d,S%02d,T%02d",2*i-1,2*i-1,2*i,2*i);
		strcat(sql2,temp);

		sprintf(temp,"%.2f,%.2f,%.2f,%.2f",
				WxpAqurieData[i].w1WinSpeed,WxpAqurieData[i].w1EnvTemp,
				WxpAqurieData[i].w2WinSpeed,WxpAqurieData[i].w2EnvTemp);
		strcat(sql3,temp);

		//最后一个加")"
		if(i==channelCount-1)
			strcat(sql2,")"),strcat(sql3,")");
		else
			strcat(sql2,","),strcat(sql3,",");
	}
	strcat(sql,sql2);
	strcat(sql," values (");
	strcat(sql,sql3);
	hstat = DBActivateSQL (hdbc,sql);
}

4 Data retrieval (field binding also uses a loop code method)

//从数据库读取数据
void WxpGetDataFromDB()
{   
	char sql[100];
	char tt[100];
	//格式化组建SQL语言字符串 (条件查询)
	sprintf(sql,"select * from DQmultiChannel%","");
	//执行SQL语言
	hstat=DBActivateSQL(hdbc,sql);

	//绑定字段
	int count=0;

	for(int i=1;i<channelCount;i++)
	{
	 DBBindColFloat(hstat,4*i-2,&(WxpAqurieData[i].w1WinSpeed),&count);
	 DBBindColFloat(hstat,4*i-1,&(WxpAqurieData[i].w1EnvTemp),&count);
	 
	 DBBindColFloat(hstat,4*i-0,&(WxpAqurieData[i].w2WinSpeed),&count);
	 DBBindColFloat(hstat,4*i+1,&(WxpAqurieData[i].w2EnvTemp),&count);
	}

    DBBindColChar(hstat,82,100,tt,&count,"%s");
	sumRecord=DBNumberOfRecords(hstat);
	DBFetchRandom(hstat,curRecord); 
	
	displayDataTableDB();
	
	sprintf(sql,"多通道历史数据  %s" ,tt);
	SetCtrlAttribute(panelHandleDb,PANELdb_WxpDataTableDB,ATTR_LABEL_TEXT,sql); 
	
	sprintf(sql,"当前记录 %d / %d" ,curRecord,sumRecord);
	SetCtrlVal(panelHandleDb,PANELdb_DataBaseInfor,sql); 

   //查询执行完毕
	DBDeactivateSQL(hstat); 
}

5 Completely close the database connection

   

DBDisconnect(hdbc);

 

Guess you like

Origin blog.csdn.net/sichuanpb/article/details/111996870