目的
有的时候我们需要 将WinCC OA里的数据定时的导出,这无可避免的要用到数据库,
今天就来带领大家 使用control脚本通过ODBC 连接mysql 数据库,读取并写入数据.
什么是ODBC?
先套用百度百科:开放数据库连接(Open Database Connectivity,ODBC)是为解决异构数据库间的数据共享而产生的,
现已成为WOSA(The Windows Open System Architecture(Windows开放系统体系结构))的主要部分和基于Windows环境的一种数据库访问接口标准ODBC 为异构数据库访问提供统一接口,
允许应用程序以SQL 为数据存取标准,存取不同DBMS管理的数据;
使应用程序直接操纵DB中的数据,免除随DB的改变而改变。用ODBC 可以访问各类计算机上的DB文件,甚至访问如Excel 表和ASCI I数据文件这类非数据库对象。
废话太多了,一张图概括
简而言之 ,就是我在windows 操作系统里要访问数据库(多种数据库)可以通过微软提供的ODBC这个程序,
使用统一的接口与数据库交互,这样就不用考虑数据库多样性的差异,简化了数据库的操作难度及复杂度
连接数据库
OK 知道原理后,来撸点代码
1) 下载MySQL ODBC 驱动并配置
按图示配置ODBC 连接
2) 读取数据库内容
我们在WinCC OA 里新建了一个panel 添加了个按钮,对点击事件进行编辑
main(mapping event)
{intrc;//声明一个dbconnectin类型conn用来管理数据库连接
dbConnection conn;//连接语句 DNS 刚刚起的ODBC实例名字 UID数据库用户名
string conStr = "DSN=WINCCOA;UID=eric;PWD=123456;";//打开 ODBC 连接
rc =dbOpenConnection(conStr,conn);//SQL 查询语句
string queryStr = "SELECT * FROM pump_station";//定义一个查询结果集存放数据类型rs
dbRecordset rs;//执行SQL语句
rc =dbOpenRecordset (conn, queryStr, rs);if (!rc)
{//遍历结果集 打印取出结果
while (!rc && !dbEOF (rs))
{
anytype id,name,addr;
rc= dbGetField (rs, 0, id);
rc= dbGetField (rs, 1, name);
rc= dbGetField (rs, 2, addr);
DebugN(id,name,addr);
rc=dbMoveNext (rs);
}
dbCloseRecordset (rs);
}//关闭数据库
dbCloseConnection(conn);
}
现在运行下 查看结果
可以看到查询结果与数据库内容一致
3) 插入语句
同样的套路(建panel增加按钮) 直接上代码
main(mapping event)
{int rc = 0;//声明一个dbconnectin类型conn用来管理数据库连接
dbConnection conn;//连接语句 DNS 刚刚起的ODBC实例名字 UID数据库用户名
string conStr = "DSN=WINCCOA;UID=eric;PWD=123456;";//打开 ODBC 连接
rc =dbOpenConnection(conStr,conn);
dbCommand dbCmd;//配置SQL 语句
string sql = "INSERT INTO pump_station (id,name,addr) VALUES (?,?,?)";
rc=dbStartCommand(conn, sql, dbCmd);//替换SQL 中的?
rc = dbSetParameter(dbCmd, 1, DB_PARAM_IN, 1535);
rc= dbSetParameter(dbCmd, 2, DB_PARAM_IN, "rockwell");
rc= dbSetParameter(dbCmd, 3, DB_PARAM_IN, "shanghai");//执行命令
rc =dbExecuteCommand(dbCmd);//关闭数据库
dbCloseConnection(conn);
}
执行 看数据库结果
OK 操作成功!
后记
结合上一节的定时器 大家可以做些好玩的东西出来
扫码关注 及时获取OA最新消息