搬家第13天-162.c脚本初步8-定期往数据库添加纪录
有时候我们需要定期往一个sql数据表添加纪录,以前尝试过vbs脚本,今天通过c脚本实现同样的功能。假设有一个sql数据库Report,下面有一个数据表,有以下几个字段:
CurNo 表示序号,bigint数据类型,主键,自动递加1;CurDate,字符串,纪录当前日期;CurTime 字符串,记录当前时间;flow1 实数;flow2 实数,flow3 实数。由于没有实际的PLC,所以这个脚本里面取当前的秒数值来模拟现场的数字。在全局c脚本写入以下代码,触发器每5秒钟执行一次。
#include "apdefap.h"
int gscAction( void )
{
#pragma code("kernel32.dll")
VOID GetLocalTime(SYSTEMTIME *lpst);
SYSTEMTIME zeit;
int flow1,flow2,flow3;
__object *cn, *rs;
char *connstr="Provider = SQLOLEDB.1;password = sa;user id = sa;Initial Catalog =Report;Data Source=ES\\wincc";
char sql[512];
GetLocalTime(&zeit);
sprintf(sql,"%s'%d-%d-%d','%d:%d:%d',%d,%d,%d)","insert into report(CurDate,CurTime,flow1,flow2,flow3) values(",zeit.wYear,zeit.wMonth,zeit.wDay,zeit.wHour,zeit.wMinute,zeit.wSecond,zeit.wSecond,zeit.wSecond+1,zeit.wSecond+3);
cn=__object_create("ADODB.Connection");
rs=__object_create("ADODB.RecordSet");
cn->open(connstr);
if (cn->State == 0)// 为0表示连接数据库不成功
MessageBox(NULL,"连接数据库失败!","警告",MB_OK);
else
{
rs->Open(sql,cn);
rs->Close;
}
if(cn->State != 0)
cn->Close;
return 0;
}