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);